;; FILE:    getkey.txt
;; MODULE:  getkey
;; BRIEF:   君影草工房さん作「getkey.dll」のラッパ
;; DEPEND:  
;; DESC:    ・適切な「番号.txt」に名前を変えて使用してください。
;;          ・変数番号は GETKEY_ARG_BEGIN で指定できます。
;;          ・「getkey.dll」をカレントディレクトリ以外に置く場合は、
;;            GETKEY_DLL にDLLファイルのパスを指定してください。
;;            その際、パス区切りには「\」を用いてください。
;; VERSION: 0.5(getkey.dll Ver.0.3, NScripter Ver.2.82)
;; AUTHOR:  senzogawa
*getkey
stralias GETKEY_DLL,"getkey.dll"
numalias GETKEY_ARG_BEGIN,100

numalias GETKEY_JOY_LEFTUP,24576
numalias GETKEY_JOY_RIGHTDOWN,40960

defsub getkey_init
defsub getkey_peekdown
defsub getkey_peekup
defsub getkey_filter
defsub getkey_isdown
defsub getkey_enumjoy
defsub getkey_getjoy

defsub getkey_getjoy2
defsub getkey_getjoy3
defsub getkey_joy_getxydown
defsub getkey_joy_getxyzdown
defsub getkey_joy_xytomove
defsub getkey_joy_isdown
defsub getkey_joy_isdown2
defsub getkey_joy_isdown3
defsub getkey_exec
defsub getkey_execwith

mov %0,GETKEY_ARG_BEGIN
numalias getkey_command,%0:inc %0
numalias getkey_down,%0:inc %0
numalias getkey_down1,%0:inc %0
numalias getkey_down2,%0:inc %0
numalias getkey_down3,%0:inc %0
numalias getkey_joyinfo,%0:inc %0
numalias getkey_keycode,%0:inc %0
numalias getkey_param,%0:inc %0
numalias getkey_result,%0:inc %0
numalias getkey_x,%0:inc %0
numalias getkey_y,%0:inc %0
numalias getkey_z,%0:inc %0
numalias GETKEY_ARG_END,%0-1

numalias VK_LBUTTON,1 ;マウス左ボタン 
numalias VK_RBUTTON,2 ;マウス右ボタン 
numalias VK_CANCEL,3 ;[Cancel] 
numalias VK_MBUTTON,4 ;マウス中央ボタン 
numalias VK_XBUTTON1,5 ;Windows 2000/XP: マウス X1 ボタン 
numalias VK_XBUTTON2,6 ;Windows 2000/XP: マウス X2 ボタン 
numalias VK_BACK,8 ;[Back space] 
numalias VK_TAB,9 ;[Tab] 
numalias VK_CLEAR,12 ;[Clear] 
numalias VK_RETURN,13 ;[Enter] 
numalias VK_SHIFT,16 ;[Shift] 
numalias VK_CONTROL,17 ;[Ctrl] 
numalias VK_MENU,18 ;[Alt] 
numalias VK_PAUSE,19 ;[Pause] 
numalias VK_CAPITAL,20 ;[Caps Lock] 
numalias VK_KANA,21 ;IME カナモード 
numalias VK_HANGUEL,22 ;IME ハングルモード 
numalias VK_JUNJA,23 ; 
numalias VK_FINAL,24 ; 
numalias VK_HANJA,25 ; 
numalias VK_KANJI,25 ;IME 漢字モード 
numalias VK_ESCAPE,27 ;[Esc] 
numalias VK_CONVERT,28 ;IME 変換 
numalias VK_NONCONVERT,29 ;IME 無変換 
numalias VK_ACCEPT,30 ; 
numalias VK_MODECHANGE,31 ;IME モード変更 
numalias VK_SPACE,32 ;スペースキー 
numalias VK_PRIOR,33 ;[Page Up] 
numalias VK_NEXT,34 ;[Page Down] 
numalias VK_END,35 ;[End] 
numalias VK_HOME,36 ;[Home] 
numalias VK_LEFT,37 ;[←] 
numalias VK_UP,38 ;[↑] 
numalias VK_RIGHT,39 ;[→] 
numalias VK_DOWN,40 ;[↓] 
numalias VK_SELECT,41 ;[Select] 
numalias VK_PRINT,42 ;[Print] 
numalias VK_EXECUTE,43 ;[Execute] 
numalias VK_SNAPSHOT,44 ;[Print Screen] 
numalias VK_INSERT,45 ;[Insert] 
numalias VK_DELETE,46 ;[Delete] 
numalias VK_HELP,47 ;[Help] 
numalias VK_NUMBER0,48 ;[0]
numalias VK_NUMBER1,49 ;[1]
numalias VK_NUMBER2,50 ;[2]
numalias VK_NUMBER3,51 ;[3]
numalias VK_NUMBER4,52 ;[4]
numalias VK_NUMBER5,53 ;[5]
numalias VK_NUMBER6,54 ;[6]
numalias VK_NUMBER7,55 ;[7]
numalias VK_NUMBER8,56 ;[8]
numalias VK_NUMBER9,57 ;[9]
numalias VK_A,65 ;[A]
numalias VK_B,66 ;[B]
numalias VK_C,67 ;[C]
numalias VK_D,68 ;[D]
numalias VK_E,69 ;[E]
numalias VK_F,70 ;[F]
numalias VK_G,71 ;[G]
numalias VK_H,72 ;[H]
numalias VK_I,73 ;[I]
numalias VK_J,74 ;[J]
numalias VK_K,75 ;[K]
numalias VK_L,76 ;[L]
numalias VK_M,77 ;[M]
numalias VK_N,78 ;[N]
numalias VK_O,79 ;[O]
numalias VK_P,80 ;[P]
numalias VK_Q,81 ;[Q]
numalias VK_R,82 ;[R]
numalias VK_S,83 ;[S]
numalias VK_T,84 ;[T]
numalias VK_U,85 ;[U]
numalias VK_V,86 ;[V]
numalias VK_W,87 ;[W]
numalias VK_X,88 ;[X]
numalias VK_Y,89 ;[Y]
numalias VK_Z,90 ;[Z]
numalias VK_LWIN,91 ;左の Windows キー 
numalias VK_RWIN,92 ;右の Windows キー 
numalias VK_APPS,93 ;アプリケーションキー 
numalias VK_SLEEP,94 ;コンピュータスリープキー 
numalias VK_NUMPAD0,96 ;テンキーの [0]
numalias VK_NUMPAD1,97 ;テンキーの [1]
numalias VK_NUMPAD2,98 ;テンキーの [2]
numalias VK_NUMPAD3,99 ;テンキーの [3]
numalias VK_NUMPAD4,100 ;テンキーの [4]
numalias VK_NUMPAD5,101 ;テンキーの [5]
numalias VK_NUMPAD6,102 ;テンキーの [6]
numalias VK_NUMPAD7,103 ;テンキーの [7]
numalias VK_NUMPAD8,104 ;テンキーの [8]
numalias VK_NUMPAD9,105 ;テンキーの [9]
numalias VK_MULTIPLY,106 ;テンキーの [ * ] 
numalias VK_ADD,107 ;テンキーの [ + ] 
numalias VK_SEPARATOR,108 ;テンキーの [Enter] 
numalias VK_SUBTRACT,109 ;テンキーの [ - ] 
numalias VK_DECIMAL,110 ;テンキーの [ . ] 
numalias VK_DIVIDE,111 ;テンキーの [ / ] 
numalias VK_F1,112 ;[F1] 
numalias VK_F2,113 ;[F2] 
numalias VK_F3,114 ;[F3] 
numalias VK_F4,115 ;[F4] 
numalias VK_F5,116 ;[F5] 
numalias VK_F6,117 ;[F6] 
numalias VK_F7,118 ;[F7] 
numalias VK_F8,119 ;[F8] 
numalias VK_F9,120 ;[F9] 
numalias VK_F10,121 ;[F10] 
numalias VK_F11,122 ;[F11] 
numalias VK_F12,123 ;[F12] 
numalias VK_F13,124 ;[F13] 
numalias VK_F14,125 ;[F14] 
numalias VK_F15,126 ;[F15] 
numalias VK_F16,127 ;[F16] 
numalias VK_F17,128 ;[F17] 
numalias VK_F18,129 ;[F18] 
numalias VK_F19,130 ;[F19] 
numalias VK_F20,131 ;[F20] 
numalias VK_F21,132 ;[F21] 
numalias VK_F22,133 ;[F22] 
numalias VK_F23,134 ;[F23] 
numalias VK_F24,135 ;[F24] 
numalias VK_NUMLOCK,144 ;[Num Lock] 
numalias VK_SCROLL,145 ;[Scroll Lock] 
numalias VK_LSHIFT,160 ;左の [Shift] 
numalias VK_RSHIFT,161 ;右の [Shift] 
numalias VK_LCONTROL,162 ;左の [Ctrl] 
numalias VK_RCONTROL,163 ;右の [Ctrl] 
numalias VK_LMENU,164 ;左の [Alt] 
numalias VK_RMENU,165 ;右の [Alt] 
numalias VK_BROWSER_BACK,166 ;Windows 2000/XP: ブラウザの「戻る」キー 
numalias VK_BROWSER_FORWARD,167 ;Windows 2000/XP: ブラウザの「次へ」キー 
numalias VK_BROWSER_REFRESH,168 ;Windows 2000/XP: ブラウザの「更新」キー 
numalias VK_BROWSER_STOP,169 ;Windows 2000/XP: ブラウザの「中止」キー 
numalias VK_BROWSER_SEARCH,170 ;Windows 2000/XP: ブラウザの「検索」キー 
numalias VK_BROWSER_FAVORITES,171 ;Windows 2000/XP: ブラウザの「お気に入り」キー 
numalias VK_BROWSER_HOME,172 ;Windows 2000/XP: ブラウザの「ホーム」キー 
numalias VK_VOLUME_MUTE,173 ;Windows 2000/XP: ボリュームのミュートキー 
numalias VK_VOLUME_DOWN,174 ;Windows 2000/XP: ボリュームダウンキー 
numalias VK_VOLUME_UP,175 ;Windows 2000/XP: ボリュームアップキー 
numalias VK_MEDIA_NEXT_TRACK,176 ;Windows 2000/XP: 「次のトラック」キー 
numalias VK_MEDIA_PREV_TRACK,177 ;Windows 2000/XP: 「前のトラック」キー 
numalias VK_MEDIA_STOP,178 ;Windows 2000/XP: 「メディア停止」キー 
numalias VK_MEDIA_PLAY_PAUSE,179 ;Windows 2000/XP: 「メディア Start / Stop 」キー 
numalias VK_LAUNCH_MAIL,180 ;Windows 2000/XP: 「メール開始」キー 
numalias VK_LAUNCH_MEDIA_SELECT,181 ;Windows 2000/XP: 「メディア選択」キー 
numalias VK_LAUNCH_APP1,182 ;Windows 2000/XP: 「アプリケーション 1 起動」キー 
numalias VK_LAUNCH_APP2,183 ;Windows 2000/XP: 「アプリケーション 2 起動」キー 
numalias VK_OEM_1,186 ;さまざまな文字のために使用できます。Windows 2000/XP: U.S. 標準キーボードでは [ :; ]
numalias VK_OEM_PLUS,187 ;Windows 2000/XP: [ + ] 
numalias VK_OEM_COMMA,188 ;Windows 2000/XP: [ , ] 
numalias VK_OEM_MINUS,189 ;Windows 2000/XP: [ - ] 
numalias VK_OEM_PERIOD,190 ;Windows 2000/XP: [ . ] 
numalias VK_OEM_2,191 ;さまざまな文字のために使用できます。Windows 2000/XP: U.S. 標準キーボードでは [ /? ]
numalias VK_OEM_3,192 ;さまざまな文字のために使用できます。Windows 2000/XP: U.S. 標準キーボードでは [ `~ ]
numalias VK_OEM_4,219 ;さまざまな文字のために使用できます。Windows 2000/XP: U.S. 標準キーボードでは [ [{ ]
numalias VK_OEM_5,220 ;さまざまな文字のために使用できます。Windows 2000/XP: U.S. 標準キーボードでは [ \| ]
numalias VK_OEM_6,221 ;さまざまな文字のために使用できます。Windows 2000/XP: U.S. 標準キーボードでは [ ]} ]
numalias VK_OEM_7,222 ;さまざまな文字のために使用できます。Windows 2000/XP: U.S. 標準キーボードでは [ '" ]
numalias VK_OEM_8,223 ;さまざまな文字のために使用できます。
numalias VK_OEM_102,226 ;Windows 2000/XP: RT 102-key キーボードの角カッコまたはバックスラッシュ 
numalias VK_PROCESSKEY,229 ;Windows 95/98/Me/NT 4.0/2000/XP: IME Process 
numalias VK_PACKET,231 ;Windows 2000/XP: Unicode 文字がキーストロークであるかのように通すために使用されます。
numalias VK_ATTN,246 ;Attn 
numalias VK_CRSEL,247 ;CrSel 
numalias VK_EXSEL,248 ;ExSel 
numalias VK_EREOF,249 ;Erase EOF 
numalias VK_PLAY,250 ;Play 
numalias VK_ZOOM,251 ;Zoom 
numalias VK_NONAME,252 ;予約 
numalias VK_PA1,253 ;PA1 
numalias VK_OEM_CLEAR,254 ;Clear 
return


;; 初期化します。Peek(D) / PeekU を実行する前に、必ず1度は実行してください。
*getkey_init
getkey_exec "Init"
return


;; DLL内部のキューから、キーダウン情報を取得します。
;; 数値戻り値には仮想キーコードを返し、
;; キューが空の場合には0を返します。
*getkey_peekdown
getparam i%getkey_result
getkey_exec "Peek"
getret %%getkey_result
return


;; DLL内部のキューから、キーアップ情報を取得します。
;; 動作はPeek(D)と同様です。
*getkey_peekup
getparam i%getkey_result
getkey_exec "PeekU"
getret %%getkey_result
return


;; 10進数で指定された仮想キーコードに対応するキーの
;; キーダウン/アップ情報をNScripterに伝えないようにします。
*getkey_filter
getparam %getkey_keycode
itoa $getkey_keycode,%getkey_keycode
getkey_execwith "Filter",$getkey_keycode
return


;; 10進数で指定された仮想キーコードに対応するキーが、
;; 押されているかを取得します。
;; NScripterのウィンドウがアクティブで押されている場合は1を、
;; 非アクティブ状態で押されている場合は-1を、
;: 押されていない場合は0を数字戻り値に返します。
*getkey_isdown
getparam i%getkey_result,%getkey_keycode
itoa $getkey_keycode,%getkey_keycode
getkey_execwith "IsDown",$getkey_keycode
getret %%getkey_result
return


;; サポートされるジョイスティックの最大数を取得し、
;; 数値戻り値に返します。
*getkey_enumjoy
getparam i%getkey_result
getkey_exec "EnumJoy"
getret %%getkey_result
return


;; 指定した識別子のジョイスティックを照会して、
;; その位置とボタンの状態を取得します。
;; 識別子は、0から(EnumJoyで返される値-1)までの数値です。
;; 文字列戻り値には、"X軸の状態,同Y軸,同Z軸,ボタンの状態" が返され、
;; 軸の状態は、0〜65535の値をとり、32767が中心です。
;; ボタンの状態は、押されているボタンに対応するビットがセットされています。
*getkey_getjoy
getparam s%getkey_result
getkey_exec "GetJoy"
getret $%getkey_result
return


;; ジョイスティック情報を分割して取得する。(ヘルパー)
*getkey_getjoy2
getparam i%getkey_x,i%getkey_y,i%getkey_down
getkey_exec "GetJoy"
getret $getkey_result
split $getkey_result,",",%%getkey_x,%%getkey_y,%getkey_z,%%getkey_down
return


;; ジョイスティック情報を分割して取得する。(ヘルパー)
*getkey_getjoy3
getparam i%getkey_x,i%getkey_y,i%getkey_z,i%getkey_down
getkey_exec "GetJoy"
getret $getkey_result
split $getkey_result,",",%%getkey_x,%%getkey_y,%%getkey_z,%%getkey_down
return


;; ジョイスティック情報からXY軸を取得する。(ヘルパー)
*getkey_joy_getxydown
getparam $getkey_joyinfo,i%getkey_x,i%getkey_y,i%getkey_down
split $getkey_result,",",%%getkey_x,%%getkey_y,%getkey_z,%%getkey_down
return


;; ジョイスティック情報からXYZ軸を取得する。(ヘルパー)
*getkey_joy_getxyzdown
getparam $getkey_joyinfo,i%getkey_x,i%getkey_y,i%getkey_z,i%getkey_down
split $getkey_result,",",%%getkey_x,%%getkey_y,%%getkey_z,%%getkey_down
return


;; XY軸の値を傾きに変換する。(ヘルパー)
;; 左上方向:-1、なし:0、右下方向:1
*getkey_joy_xytomove
getparam i%getkey_x,i%getkey_y
if %%getkey_x<GETKEY_JOY_LEFTUP mov %%getkey_x,-1:skip 3
if %%getkey_x>GETKEY_JOY_RIGHTDOWN mov %%getkey_x,1:skip 2
mov %%getkey_x,0
if %%getkey_y<GETKEY_JOY_LEFTUP mov %%getkey_y,-1:return
if %%getkey_y>GETKEY_JOY_RIGHTDOWN mov %%getkey_y,1:return
mov %%getkey_y,0
return


;; ジョイスティックボタン情報からボタン状態を取得する。(ヘルパー)
*getkey_joy_isdown
getparam %getkey_down,i%getkey_down1
if %getkey_down mod 4 mod 2==1 mov %%getkey_down1,1:return
mov %%getkey_down1,0
return


;; ジョイスティックボタン情報からボタン状態を取得する。(ヘルパー)
*getkey_joy_isdown2
getparam %getkey_down,i%getkey_down1,i%getkey_down2
mov %%getkey_down1,0
mov %%getkey_down2,0
if %getkey_down mod 4/2==1 mov %%getkey_down2,1
if %getkey_down mod 2==1 mov %%getkey_down1,1
return


;; ジョイスティックボタン情報からボタン状態を取得する。(ヘルパー)
*getkey_joy_isdown3
getparam %getkey_down,i%getkey_down1,i%getkey_down2,i%getkey_down3
mov3 %getkey_down1,0,0,0
if %getkey_down/4==1 mov %%getkey_down3,1
if %getkey_down mod 4/2==1 mov %%getkey_down2,1
if %getkey_down mod 2==1 mov %%getkey_down1,1
return


;; パラメータなしメッセージを送る
*getkey_exec
getparam $getkey_command
exec_dll GETKEY_DLL+"/"+$getkey_command
return


;; パラメータ付きメッセージを送る
*getkey_execwith
getparam $getkey_command,$getkey_param
exec_dll GETKEY_DLL+"/"+$getkey_command+","+$getkey_param
return