このようなモジュールを作ってみました。
よろしければお使い下さい。
//////////////////////////////////////////////////
//    getkey_ex                                 //
//        ky() == 1  押した瞬間                 //
//        ky() == -1 放した瞬間                 //
//        ky() >= 1  押している間増え続ける     //
//        ky() == 0  押されていない             //
//////////////////////////////////////////////////
#module
#deffunc getkey_ex_ini array kyind_
	kyindmax=length(kyind_)
	dim kyind,kyindmax
	repeat kyindmax
		kyind(cnt)=kyind_(cnt)
	loop
	dim ky@,256
return
#deffunc getkey_ex
	mref st,64 : st=ginfo(2)	//statにアクティブなウィンドウIDが入る
	if st>=0 : {
		repeat kyindmax
			getkey kytmp,kyind(cnt)
			if kytmp=1 : {
				ky@(kyind(cnt))++
			} else {
				if ky@(kyind(cnt))>0 : ky@(kyind(cnt))=-1 : else : ky@(kyind(cnt))=0
			}
		loop
	}
return
#global
//////////////////////////////////////////////////
//    制作開始日    2009/05/12 01:24            //
//    最終更新日    2009/05/31 06:12            //
//    by VGM    (ご自由にお使い下さい)          //
//////////////////////////////////////////////////
//以下サンプルプログラム
#const VK_ESCAPE 0x1B ;ESC 
#const VK_LEFT 0x25 ;← 
#const VK_UP 0x26 ;↑ 
#const VK_RIGHT 0x27 ;→ 
#const VK_DOWN 0x28 ;↓ 
	dim kyind,5	//必ず監視するキーの数で初期化
	kyind=VK_LEFT,VK_UP,VK_RIGHT,VK_DOWN,VK_ESCAPE	//監視するキー
	getkey_ex_ini kyind	//最初に実行(監視するキーを変更する時に実行)
	cx=320 : cy=240
repeat
	getkey_ex
	st=stat
	//statにアクティブなウィンドウIDが入る
	if ky(VK_ESCAPE) : end		//[Esc]
	if (ky(VK_LEFT)=1) or ((ky(VK_LEFT)>=30) and (ky(VK_LEFT)\5=0)) : cx-=10
	//↑押した瞬間と一定時間経過後に一定時間ごとに移動
	if ky(VK_UP)=1 : cy-=10
	//↑押した瞬間だけ移動
	if (ky(VK_RIGHT)=1) or (ky(VK_RIGHT)>=50) : cx+=10
	//↑押した瞬間と一定時間経過後移動
	if ky(VK_DOWN)=-1 : cy+=10
	//↑放した瞬間だけ移動
	redraw 2 : color : boxf : color 255,255,255 : pos cx,cy : mes "o"
	pos 0,0 : mes "cx "+cx+" / cy "+cy
	repeat length(kyind)
		mes "key "+kyind(cnt)+" / "+ky(kyind(cnt))
	loop
	mes "stat (winID) = "+st
	redraw 1 : await 30
loop