GETKEYSTATEゲットキーステイト関数

本ページには広告が含まれています。

キー・マウスの状態を取得します。キー・マウスが押されている間はTrue、押されていない間はFalseを返します。キーボードの操作を行うにはKBD関数、マウスの操作を行うにはBTN関数を使います。

構文
  1. Boolean = GETKEYSTATE( キーコード )
引数
キーコード (#getkeystate必須
状態を知りたいキーコード
戻り値
TRUE:クリックがあった、 FALSE:なし

※マウスクリック
  1. VK_RBUTTON(右)
  2. VK_LBUTTON(左)
  3. VK_MBUTTON(中)

※トグルキー状態
  1. TGL_IME(IME)
  2. TGL_NUMLOCK(NumLock)
  3. TGL_CAPSLOCK(CapsLock)
  4. TGL_SCROLLLOCK(ScrollLock)
  5. TGL_KANALOCK(カタカナ)

マウス

マウスのクリックの状態を取得します。

以下は左クリックの状態を吹き出しに表示します。押されている間は1、押されていないときは0を表示します。

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

WHILE TRUE
	FUKIDASI(GETKEYSTATE(VK_LBUTTON))
	SLEEP(0.001)
WEND

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND

トグルキー

トグルキーとは押すたびに2つの状態(オン・オフ)が変わるキーのことをいい、半角/全角キーNumLockキーCapsLockキーScrollLockキーかなロックキーの5つがあります。

半角/全角キー
半角入力と全角入力を切り替えます。
NumLockキー
テンキーで数字入力と移動キーを切り替えます。
CapsLockキー
CapsLockのCapsとはCapital lettersの略で大文字を意味しています。CapsLockを有効にすることでアルファベット入力を大文字に固定することができます。
ScrollLockキー
画面上のカーソルの位置を固定し、表示範囲を上下左右にスクロールします。
かなロックキー
ローマ字入力とかな入力を切り替えます。かなロックキーがオンでかな入力、オフでローマ字入力です。

CapsLockのみは単独で状態を切り替えることができず、ShiftCapsLockを組み合わせて押す必要があります。

以下はトグルキーの状態とGETKEYSTATE関数の戻り値の関係を表にしたものです。半角/全角以外はONになっていればTrueを返します。

True False
半角/全角 入力モードが以下のいずれか
  1. ひらがな
  2. 全角カタカナ
  3. 全角英数
  4. 半角カタカナ
  5. 半角英数
直接入力
NumLock ON
テンキーで数値が入力できる状態
OFF
テンキーの2,4,6,8でカーソルが動く状態
CapsLock ON
アルファベット入力が大文字の状態
OFF
アルファベット入力が小文字の状態
ScrollLock ON
移動キーでカーソルが動く状態
OFF
移動キーで画面をスクロールできる状態
カナロック ON
ローマ字入力
OFF
かな入力

以下はGETKEYSTATE関数のトグルキー状態とそれに対応するKBD関数の定数の関係を表したものです。

GETKEYSTATE KBD
半角/全角 TGL_IME VK_KANJI
NumLock TGL_NUMLOCK VK_NUMLOCK
CapsLock TGL_CAPSLOCK VK_CAPITAL
ScrollLock TGL_SCROLLLOCK VK_SCROLL
カナロック TGL_KANALOCK VK_KANA

トグルキーはクリックするたびに状態が変わるので、まずGETKEYSTATE関数で状態を取得してからKBD関数でキーを押すか押さないかを判断する必要があります。

例えばNumLockを有効にしたいとき、GETKEYSTATE関数で現在の状態を確認してOFFになっているときのみKBD関数NumLockキーを押すという処理を行います。このような処理を記述することで、現在の状態に関係なくNumLockがONにすることができます。

UWSC
IF !GETKEYSTATE(TGL_NUMLOCK) THEN KBD(VK_NUMLOCK)

逆にNumLockを無効にしたいときは、現在の状態がONになっているときのみNumLockキーを押すという処理を行います。GETKEYSTATEの前に!があるかないかの違いのみです。

UWSC
IF GETKEYSTATE(TGL_NUMLOCK) THEN KBD(VK_NUMLOCK)

特定のキーの長押しを検知

一つのキー

特定のキーを押してから離すまでの時間(単位:ミリ秒)で測定。以下はスペースキーを押してから離すまでの時間を返します。

UWSC
DEF_DLL GetTickCount(): LONG: kernel32.dll
DIM key = VK_SPACE

REPEAT
	SLEEP(0.001)
UNTIL GETKEYSTATE(key)

DIM stime = GetTickCount()

REPEAT
	DIM time = GetTickCount() - stime
	FUKIDASI(time)
	SLEEP(0.001)
UNTIL !GETKEYSTATE(key)

PRINT time

特定のキーを押して指定時間以上で抜けます。以下はスペースキーが3000ミリ秒押し続けたらループを抜けます。

UWSC
DEF_DLL GetTickCount(): LONG: kernel32.dll
DIM key = VK_SPACE

REPEAT
	SLEEP(0.001)
UNTIL GETKEYSTATE(key)

DIM stime = GetTickCount()

REPEAT
	DIM time = GetTickCount() - stime
	FUKIDASI(time)
	SLEEP(0.001)
UNTIL !GETKEYSTATE(key) OR time >= 3000

PRINT time

複数のキー

複数のキーを検知するには、論理演算子(ANDOR)で繋げて記述します。

以下はCtrlSpaceの同時押しを検知するプログラムです。

UWSC
REPEAT
	SLEEP(0.001)
UNTIL GETKEYSTATE(VK_CTRL) AND GETKEYSTATE(VK_SPACE)

仮想キーコード一覧

定数名 意味 対応キー Shift
1 VK_LBUTTON マウスの左ボタン
2 VK_RBUTTON マウスの右ボタン
3 VK_CANCEL コントロール・ブレイク処理
4 VK_MBUTTON マウスの中央ボタン(3ボタンマウス)
5 VK_XBUTTON1 マウスの第1拡張ボタン
6 VK_XBUTTON2 マウスの第2拡張ボタン
7
8 VK_BACK Backspaceキー Backspace
9 VK_TAB Tabキー Tab
10 予約済
11 予約済
12 VK_CLEAR Clearキー Clear
13 VK_RETURN Enterキー Enter
14 未定義
15 未定義
16 VK_SHIFT
17 VK_CONTROL
18 VK_MENU
19 VK_PAUSE Pauseキー Pause
20 VK_CAPITAL CapsLockキー CapsLock
21 VK_KANA IME かなモード
22 未定義
23 VK_JUNJA IME Junjaモード
24 VK_FINAL IME ファイナルモード
25 VK_KANJI IME 漢字モード
26 未定義
27 VK_ESCAPE Escキー Esc
28 VK_CONVERT IME 変換 変換
29 VK_NONCONVERT IME 無変換 無変換
30 VK_ACCEPT IME 使用可能
31 VK_MODECHANGE IME モード変更要求
32 VK_SPACE スペースキー Space
33 VK_PRIOR PageUpキー PageUp
34 VK_NEXT PageDownキー PageDown
35 VK_END Endキー End
36 VK_HOME Homeキー Home
37 VK_LEFT ←キー
38 VK_UP ↑キー
39 VK_RIGHT →キー
40 VK_DOWN ↓キー
41 VK_SELECT Selectキー
42 VK_PRINT Printキー
43 VK_EXECUTE Executeキー
44 VK_SNAPSHOT PrintScreenキー PrintScreen
45 VK_INSERT Insertキー Insert
46 VK_DELETE Deleteキー Delete
47 VK_HELP Helpキー
48 VK_0 0キー 0
49 VK_1 1キー 1 !
50 VK_2 2キー 2 "
51 VK_3 3キー 3 #
52 VK_4 4キー 4 $
53 VK_5 5キー 5 %
54 VK_6 6キー 6 &
55 VK_7 7キー 7 '
56 VK_8 8キー 8 (
57 VK_9 9キー 9 )
58 未定義
59 未定義
60 未定義
61 未定義
62 未定義
63 未定義
64 未定義
65 VK_A Aキー a A
66 VK_B Bキー b B
67 VK_C Cキー c C
68 VK_D Dキー d D
69 VK_E Eキー e E
70 VK_F Fキー f F
71 VK_G Gキー g G
72 VK_H Hキー h H
73 VK_I Iキー i I
74 VK_J Jキー j J
75 VK_K Kキー k K
76 VK_L Lキー l L
77 VK_M Mキー m M
78 VK_N Nキー n N
79 VK_O Oキー o O
80 VK_P Pキー p P
81 VK_Q Qキー q Q
82 VK_R Rキー r R
83 VK_S Sキー s S
84 VK_T Tキー t T
85 VK_U Uキー u U
86 VK_V Vキー v V
87 VK_W Wキー w W
88 VK_X Xキー x X
89 VK_Y Yキー y Y
90 VK_Z Zキー z Z
91 VK_LWIN 左Windowsキー
92 VK_RWIN 右Windowsキー
93 VK_APPS アプリケーションキー
94 予約済
95 VK_SLEEP コンピュータスリープキー
96 VK_NUMPAD0 テンキーの0キー テンキーの0 Insert
97 VK_NUMPAD1 テンキーの1キー テンキーの1 End
98 VK_NUMPAD2 テンキーの2キー テンキーの2
99 VK_NUMPAD3 テンキーの3キー テンキーの3 PageDown
100 VK_NUMPAD4 テンキーの4キー テンキーの4
101 VK_NUMPAD5 テンキーの5キー テンキーの5
102 VK_NUMPAD6 テンキーの6キー テンキーの6
103 VK_NUMPAD7 テンキーの7キー テンキーの7 Home
104 VK_NUMPAD8 テンキーの8キー テンキーの8
105 VK_NUMPAD9 テンキーの9キー テンキーの9 PageUp
106 VK_MULTIPLY テンキーの*キー テンキーの*
107 VK_ADD テンキーの+キー テンキーの+
108 VK_SEPARATOR 区切り記号キー
109 VK_SUBTRACT 減算記号キー テンキーの-
110 VK_DECIMAL 小数点キー テンキーの. Delete
111 VK_DIVIDE 除算記号キー テンキーの/
112 VK_F1 F1キー F1
113 VK_F2 F2キー F2
114 VK_F3 F3キー F3
115 VK_F4 F4キー F4
116 VK_F5 F5キー F5
117 VK_F6 F6キー F6
118 VK_F7 F7キー F7
119 VK_F8 F8キー F8
120 VK_F9 F9キー F9
121 VK_F10 F10キー F10
122 VK_F11 F11キー F11
123 VK_F12 F12キー F12
124 VK_F13 F13キー F13
125 VK_F14 F14キー F14
126 VK_F15 F15キー F15
127 VK_F16 F16キー F16
128 VK_F17 F17キー F17
129 VK_F18 F18キー F18
130 VK_F19 F19キー F19
131 VK_F20 F20キー F20
132 VK_F21 F21キー F21
133 VK_F22 F22キー F22
134 VK_F23 F23キー F23
135 VK_F24 F24キー F24
136 VK_NAVIGATION_VIEW 割当無し
137 VK_NAVIGATION_MENU 割当無し
138 VK_NAVIGATION_UP 割当無し
139 VK_NAVIGATION_DOWN 割当無し
140 VK_NAVIGATION_LEFT 割当無し
141 VK_NAVIGATION_RIGHT 割当無し
142 VK_NAVIGATION_ACCEPT 割当無し
143 VK_NAVIGATION_CANCEL 割当無し
144 VK_NUMLOCK NumLockキー NumLock
145 VK_SCROLL ScrollLockキー ScrollLock
146 VK_OEM_NEC_EQUAL OEM固有
VK_OEM_FJ_JISHO
147 VK_OEM_FJ_MASSHOU OEM固有
148 VK_OEM_FJ_TOUROKU OEM固有
149 VK_OEM_FJ_LOYA OEM固有
150 VK_OEM_FJ_ROYA OEM固有
151 割当無し
152 割当無し
153 割当無し
154 割当無し
155 割当無し
156 割当無し
157 割当無し
158 割当無し
159 割当無し
160 VK_LSHIFT 左Shiftキー Shift
161 VK_RSHIFT 右Shiftキー Shift
162 VK_LCONTROL 左Ctrlキー Ctrl
163 VK_RCONTROL 右Ctrlキー Ctrl
164 VK_LMENU 左Altキー Alt
165 VK_RMENU 右Altキー Alt
166 VK_BROWSER_BACK ブラウザーの戻るキー
167 VK_BROWSER_FORWARD ブラウザーの進むキー
168 VK_BROWSER_REFRESH ブラウザーの更新のキー
169 VK_BROWSER_STOP ブラウザーの停止キー
170 VK_BROWSER_SEARCH ブラウザーの検索キー
171 VK_BROWSER_FAVORITES ブラウザーのお気に入りキー
172 VK_BROWSER_HOME ブラウザーの開始およびホームキー
173 VK_VOLUME_MUTE 音量ミュートキー
174 VK_VOLUME_DOWN 音量ダウンキー
175 VK_VOLUME_UP 音量アップキー
176 VK_MEDIA_NEXT_TRACK 次のトラックキー
177 VK_MEDIA_PREV_TRACK 前のトラックキー
178 VK_MEDIA_STOP メディア停止キー
179 VK_MEDIA_PLAY_PAUSE メディア再生/一時停止キー
180 VK_LAUNCH_MAIL メール起動キー
181 VK_LAUNCH_MEDIA_SELECT メディア選択キー
182 VK_LAUNCH_APP1 アプリケーション1起動キー
183 VK_LAUNCH_APP2 アプリケーション2起動キー
184 予約済
185 予約済
186 VK_OEM_1 OEM1キー : *
187 VK_OEM_PLUS +キー ; +
188 VK_OEM_COMMA ,キー , <
189 VK_OEM_MINUS -キー - =
190 VK_OEM_PERIOD .キー . >
191 VK_OEM_2 OEM2キー / ?
192 VK_OEM_3 OEM3キー @ `
193 VK_ABNT_C1 予約済
194 VK_ABNT_C2 予約済
195 VK_GAMEPAD_A 予約済
196 VK_GAMEPAD_B 予約済
197 VK_GAMEPAD_X 予約済
198 VK_GAMEPAD_Y 予約済
199 VK_GAMEPAD_RIGHT_SHOULDER 予約済
200 VK_GAMEPAD_LEFT_SHOULDER 予約済
201 VK_GAMEPAD_LEFT_TRIGGER 予約済
202 VK_GAMEPAD_RIGHT_TRIGGER 予約済
203 VK_GAMEPAD_DPAD_UP 予約済
204 VK_GAMEPAD_DPAD_DOWN 予約済
205 VK_GAMEPAD_DPAD_LEFT 予約済
206 VK_GAMEPAD_DPAD_RIGHT 予約済
207 VK_GAMEPAD_MENU 予約済
208 VK_GAMEPAD_VIEW 予約済
209 VK_GAMEPAD_LEFT_THUMBSTICK_BUTTON 予約済
210 VK_GAMEPAD_RIGHT_THUMBSTICK_BUTTON 予約済
211 VK_GAMEPAD_LEFT_THUMBSTICK_UP 予約済
212 VK_GAMEPAD_LEFT_THUMBSTICK_DOWN 予約済
213 VK_GAMEPAD_LEFT_THUMBSTICK_RIGHT 予約済
214 VK_GAMEPAD_LEFT_THUMBSTICK_LEFT 予約済
215 VK_GAMEPAD_RIGHT_THUMBSTICK_UP 予約済
216 VK_GAMEPAD_RIGHT_THUMBSTICK_DOWN 割当無し
217 VK_GAMEPAD_RIGHT_THUMBSTICK_RIGHT 割当無し
218 VK_GAMEPAD_RIGHT_THUMBSTICK_LEFT 割当無し
219 VK_OEM_4 OEM4キー [ {
220 VK_OEM_5 OEM5キー \ |
221 VK_OEM_6 OEM6キー ] }
222 VK_OEM_7 OEM7キー
223 VK_OEM_8 OEM8キー
224 予約済
225 VK_OEM_AX OEM固有
226 VK_OEM_102 OEM102キー \ _
227 VK_ICO_HELP OEM固有
228 VK_ICO_00
229 VK_PROCESSKEY IME PROCESSキー
230 VK_ICO_CLEAR OEM固有
231 VK_PACKET キーボード以外の入力手段に使用される
32 ビット仮想キー値の下位ワード
232 割当無し
233 VK_OEM_RESET OEM固有
234 VK_OEM_JUMP OEM固有
235 VK_OEM_PA1 OEM固有
236 VK_OEM_PA2 OEM固有
237 VK_OEM_PA3 OEM固有
238 VK_OEM_WSCTRL OEM固有
239 VK_OEM_CUSEL OEM固有
240 VK_OEM_ATTN OEM固有
241 VK_OEM_FINISH OEM固有
242 VK_OEM_COPY OEM固有
243 VK_OEM_AUTO OEM固有
244 VK_OEM_ENLW OEM固有
245 VK_OEM_BACKTAB OEM固有
246 VK_ATTN Attnキー Attn
247 VK_CRSEL CrSelキー CrSel
248 VK_EXSEL ExSelキー ExSel
249 VK_EREOF Erase EOFキー
250 VK_PLAY Playキー
251 VK_ZOOM Zoomキー
252 VK_NONAME 予約済
253 VK_PA1 PA1キー
254 VK_OEM_CLEAR Clearキー
255

プログラム実行例

日本語入力をONにする

現在の入力モードが直接入力であれば半角/全角キーを押して日本語入力に切り替えます。

UWSC
IF !GETKEYSTATE(TGL_IME) THEN KBD(VK_KANJI, CLICK)
使用関数

日本語入力をOFFにする

現在の入力モードが日本語入力であれば半角/全角キーを押して直接入力に切り替えます。

UWSC
IF GETKEYSTATE(TGL_IME) THEN KBD(VK_KANJI, CLICK)
使用関数

NumLockをONにする

NumLockの状態を確認し、OFFであればNumLockキーを押してONにします。

UWSC
IF !GETKEYSTATE(TGL_NUMLOCK) THEN KBD(VK_NUMLOCK)
使用関数

NumLockをOFFにする

NumLockの状態を確認し、ONであればNumLockキーを押してOFFにします。

UWSC
IF GETKEYSTATE(TGL_NUMLOCK) THEN KBD(VK_NUMLOCK)
使用関数

CapsLockをONにする

CapsLockの状態を確認し、OFFであればCapsLockキーを押してONにします。

UWSC
IF !GETKEYSTATE(TGL_CAPSLOCK) THEN KBD(VK_CAPITAL)
使用関数

CapsLockをOFFにする

CapsLockの状態を確認し、ONであればCapsLockキーを押してOFFにします。

UWSC
IF GETKEYSTATE(TGL_CAPSLOCK) THEN KBD(VK_CAPITAL)
使用関数

ScrollLockをONにする

UWSC
IF !GETKEYSTATE(TGL_SCROLLLOCK) THEN KBD(VK_SCROLL)
使用関数

ScrollLockをOFFにする

UWSC
IF GETKEYSTATE(TGL_SCROLLLOCK) THEN KBD(VK_SCROLL)
使用関数

カナロックをONにする

UWSC
IF !GETKEYSTATE(TGL_KANALOCK) THEN KBD(VK_KANA)
使用関数

カナロックをOFFにする

UWSC
IF GETKEYSTATE(TGL_KANALOCK) THEN KBD(VK_KANA)
使用関数

関連記事

LOCKHARDEX関数 (スクリプト関数)
MMV関数 (スクリプト関数)
マウスカーソルを指定した座標に移動します。
MOUSEORG関数 (スクリプト関数)
マウス座標を相対座標にする、 またはマウスとキー情報を直接ウィンドウへ送ります。
MUSCUR関数 (スクリプト関数)
MUSCUR関数は、マウスカーソルの種別を数値で返す関数です。引数はなく、戻値はInteger型です。
SETHOTKEY関数 (スクリプト関数)
SETHOTKEY関数は、ホットキーを設定しProcedure関数を呼び出すことができる関数です。キーコードは仮想キーを指定します。関数の呼び出しに成功した場合はTRUE、失敗した場合はFALSEを返します。