KBDキーボード関数

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

キーボードを操作します。キーの状態を調べるにはGETKEYSTATE関数、文字列を送信する場合はSENDSTR関数を使います。

構文
  1. void = KBD( 仮想KEY, 状態, ms )
引数
仮想KEY (#kbd必須
仮想KEYコード、もしくはUNICODE
状態 (#kbd = CLICK)省略可
CLICK(0:デフォルト),DOWN(1),UP(2)
ms (Single = 0)省略可
実行までの待ち時間 (ミリセカンド)
戻り値

SENDSTR関数との違い

SENDSTR関数は文字列を送信するのに対し、KBD関数はキー入力を行います。そのためIMEの状態(日本語入力か半角入力かなど)によって入力される文字が変わってきます。入力する文字列が決まっている場合はSENDSTR関数、キーボードを押したい場合はKBD関数を使いましょう。

以下に示す2つのプログラムはメモ帳を起動し、AIUEOを順に押してく例。同じAIUEOと押していく処理でもIMEの状態で結果が変わります。

2つのプログラムの違いはGETKEYSTATE関数の前に!があるかないかだけです。日本語入力と半角入力を意図的に変えています。

まず半角で入力したとき。

UWSC
DIM ID = EXEC("notepad")
CTRLWIN(ID, ACTIVATE)

IF GETKEYSTATE(TGL_IME) THEN KBD(VK_KANJI,CLICK)

KBD(VK_A)
KBD(VK_I)
KBD(VK_U)
KBD(VK_E)
KBD(VK_O)
結果
プレーンテキスト
aiueo

次に日本語で入力したとき。

UWSC
DIM ID = EXEC("notepad")
CTRLWIN(ID, ACTIVATE)

IF !GETKEYSTATE(TGL_IME) THEN KBD(VK_KANJI,CLICK)

KBD(VK_A)
KBD(VK_I)
KBD(VK_U)
KBD(VK_E)
KBD(VK_O)
結果
プレーンテキスト
あいうえお

仮想キーコード一覧

以下は日本語環境で主流の109キーボードのキー配列を表したものです。

以下の画像は直接入力モードでCapsLockが解除されているときの入力値をまとめたものです。赤字が仮想キーコードの値、青字Shiftキーを押しながら入力したときの文字、緑字はテンキーでNumLockを解除しているときの値です。

キー名にあるOEM(Originalオリジナル Equipmentイクイップメント Manufacturerマニュファクチュアラー)固有とはキーボードメーカーがボタンを拡張できるように予め予約されたキーのことです。

以下は仮想キーコードをまとめた表です。Shift列Shiftを押しながら対応キーを押したときに入力される文字です。これらの入力方法はショートカットキーを実行(修飾子キーが1つ)を参照してください。

マウス操作はBTN関数を使います。

定数名説明キーShift
1VK_LBUTTONマウスの左ボタン
2VK_RBUTTONマウスの右ボタン
3VK_CANCELコントロール・ブレイク処理(定義なし)
4VK_MBUTTONマウスの中央ボタン(3ボタンマウス)
5VK_XBUTTON1マウスの第1拡張ボタン(定義なし)
6VK_XBUTTON2マウスの第2拡張ボタン(定義なし)
7
8VK_BACKBackspaceキーBackspace
9VK_TABTabキーTab
10予約済
11予約済
12VK_CLEARClearキーClear
13VK_RETURNEnterキーEnter
13VK_ENTEREnterキーEnter
14予約済
15予約済
16VK_SHIFTShiftキーShift
17VK_CTRLCtrlキーCtrl
17VK_CONTROLCtrlキーCtrl
18VK_ALTAltキーAlt
18VK_MENUAltキーAlt
19VK_PAUSEPauseキーPause
20VK_CAPITALCapsLockキーCapsLock
21VK_KANAIME かなモード
22未定義
23VK_JUNJAIME Junjaモード
24VK_FINALIME ファイナルモード
25VK_KANJIIME 漢字モード
26未定義
27VK_ESCEscキーEsc
27VK_ESCAPEEscキーEsc
28VK_CONVERTIME 変換変換
29VK_NONCONVERTIME 無変換無変換
30VK_ACCEPTIME 使用可能
31VK_MODECHANGEIME モード変換要求
32VK_SPACEスペースキーSpace
33VK_PRIORPageUpキーPageUp
34VK_NEXTPageDownキーPageDown
35VK_ENDEndキーEnd
36VK_HOMEHomeキーHome
37VK_LEFT←キー
38VK_UP↑キー
39VK_RIGHT→キー
40VK_DOWN↓キー
41VK_SELECTSelectキー
42VK_PRINTPrintキー
43VK_EXECUTEExecuteキー
44VK_SNAPSHOTPrintScreenキーPrintScree
45VK_INSERTInsertキーInsert
46VK_DELETEDeleteキーDelete
47VK_HELPHelpキー
48VK_00キー0
49VK_11キー1!
50VK_22キー2"
51VK_33キー3#
52VK_44キー4$
53VK_55キー5%
54VK_66キー6&
55VK_77キー7'
56VK_88キー8(
57VK_99キー9)
58未定義
59未定義
60未定義
61未定義
62未定義
63未定義
64未定義
65VK_AAキーaA
66VK_BBキーbB
67VK_CCキーcC
68VK_DDキーdD
69VK_EEキーeE
70VK_FFキーfF
71VK_GGキーgG
72VK_HHキーhH
73VK_IIキーiI
74VK_JJキーjJ
75VK_KKキーkK
76VK_LLキーlL
77VK_MMキーmM
78VK_NNキーnN
79VK_OOキーoO
80VK_PPキーpP
81VK_QQキーqQ
82VK_RRキーrR
83VK_SSキーsS
84VK_TTキーtT
85VK_UUキーuU
86VK_VVキーvV
87VK_WWキーwW
88VK_XXキーxX
89VK_YYキーyY
90VK_ZZキーzZ
91VK_WINWindowsキー
92VK_STARTWindowsキー
92VK_RWIN右Windowsキー
93VK_APPSアプリケーションキー
94予約済
95VK_SLEEPコンピュータスリープキー
96VK_NUMPAD0テンキーの0キーテンキーの0Insert
97VK_NUMPAD1テンキーの1キーテンキーの1End
98VK_NUMPAD2テンキーの2キーテンキーの2
99VK_NUMPAD3テンキーの3キーテンキーの3PageDown
100VK_NUMPAD4テンキーの4キーテンキーの4
101VK_NUMPAD5テンキーの5キーテンキーの5
102VK_NUMPAD6テンキーの6キーテンキーの6
103VK_NUMPAD7テンキーの7キーテンキーの7Home
104VK_NUMPAD8テンキーの8キーテンキーの8
105VK_NUMPAD9テンキーの9キーテンキーの9PageUp
106VK_MULTIPLYテンキーの*キーテンキーの*
107VK_ADDテンキーの+キーテンキーの+
108VK_SEPARATOR区切り記号キー
109VK_SUBTRACT減算記号キーテンキーの-
110VK_DECIMAL小数点キーテンキーの.Delete
111VK_DIVIDE除算記号キーテンキーの/
112VK_F1F1キーF1
113VK_F2F2キーF2
114VK_F3F3キーF3
115VK_F4F4キーF4
116VK_F5F5キーF5
117VK_F6F6キーF6
118VK_F7F7キーF7
119VK_F8F8キーF8
120VK_F9F9キーF9
121VK_F10F10キーF10
122VK_F11F11キーF11
123VK_F12F12キーF12
124VK_F13VK_F13F13
125VK_F14VK_F14F14
126VK_F15VK_F15F15
127VK_F16VK_F16F16
128VK_F17VK_F17F17
129VK_F18VK_F18F18
130VK_F19VK_F19F19
131VK_F20VK_F20F20
132VK_F21VK_F21F21
133VK_F22VK_F22F22
134VK_F23VK_F23F23
135VK_F24VK_F24F24
136VK_NAVIGATION_VIEW割当無し
137VK_NAVIGATION_MENU割当無し
138VK_NAVIGATION_UP割当無し
139VK_NAVIGATION_DOWN割当無し
140VK_NAVIGATION_LEFT割当無し
141VK_NAVIGATION_RIGHT割当無し
142VK_NAVIGATION_ACCEPT割当無し
143VK_NAVIGATION_CANCEL割当無し
144VK_NUMLOCKNumLockキーNumLock
145VK_SCROLLScrollLockキーScrollLock
146VK_OEM_NEC_EQUAL
146VK_OEM_FJ_JISHO
147VK_OEM_FJ_MASSHOU
148VK_OEM_FJ_TOUROKU
149VK_OEM_FJ_LOYA
150VK_OEM_FJ_ROYA
151割当無し
152割当無し
153割当無し
154割当無し
155割当無し
156割当無し
157割当無し
158割当無し
159割当無し
160VK_LSHIFT左ShiftキーShift
161VK_RSHIFT右ShiftキーShift
162VK_LCTRL左CtrlキーCtrl
163VK_RCTRL右CtrlキーCtrl
164VK_LALT左AltキーAlt
164VK_LMENU左AltキーAlt
165VK_RALT右AltキーAlt
165VK_RMENU右AltキーAlt
166VK_BROWSER_BACKブラウザーの戻るキー
167VK_BROWSER_FORWARDブラウザーの進むキー
168VK_BROWSER_REFRESHブラウザーの更新のキー
169VK_BROWSER_STOPブラウザーの停止キー
170VK_BROWSER_SEARCHブラウザーの検索キー
171VK_BROWSER_FAVORITESブラウザーのお気に入りキー
172VK_BROWSER_HOMEブラウザーの開始およびホームキー
173VK_VOLUME_MUTE音量ミュートキー
174VK_VOLUME_DOWN音量ダウンキー
175VK_VOLUME_UP音量アップキー
176VK_MEDIA_NEXT_TRACK次のトラックキー
177VK_MEDIA_PREV_TRACK前のトラックキー
178VK_MEDIA_STOPメディア停止キー
179VK_MEDIA_PLAY_PAUSEメディア再生/一時停止キー
180VK_LAUNCH_MAILメール起動キー
181VK_LAUNCH_MEDIA_SELECTメディア選択キー
182VK_LAUNCH_APP1アプリケーション1起動キー
183VK_LAUNCH_APP2アプリケーション2起動キー
184予約済
185予約済
186VK_OEM_1OEM1キー:*
187VK_OEM_PLUS+キー;+
188VK_OEM_COMMA,キー,<
189VK_OEM_MINUS-キー-=
190VK_OEM_PERIOD.キー.>
191VK_OEM_2OEM2キー/?
192VK_OEM_3OEM3キー@`
193VK_ABNT_C1予約済
194VK_ABNT_C2予約済
195VK_GAMEPAD_A予約済
196VK_GAMEPAD_B予約済
197VK_GAMEPAD_X予約済
198VK_GAMEPAD_Y予約済
199VK_GAMEPAD_RIGHT_SHOULDER予約済
200VK_GAMEPAD_LEFT_SHOULDER予約済
201VK_GAMEPAD_LEFT_TRIGGER予約済
202VK_GAMEPAD_RIGHT_TRIGGER予約済
203VK_GAMEPAD_DPAD_UP予約済
204VK_GAMEPAD_DPAD_DOWN予約済
205VK_GAMEPAD_DPAD_LEFT予約済
206VK_GAMEPAD_DPAD_RIGHT予約済
207VK_GAMEPAD_MENU予約済
208VK_GAMEPAD_VIEW予約済
209VK_GAMEPAD_LEFT_THUMBSTICK_BUTTO予約済
210VK_GAMEPAD_RIGHT_THUMBSTICK_BUTT予約済
211VK_GAMEPAD_LEFT_THUMBSTICK_UP予約済
212VK_GAMEPAD_LEFT_THUMBSTICK_DOWN予約済
213VK_GAMEPAD_LEFT_THUMBSTICK_RIGHT予約済
214VK_GAMEPAD_LEFT_THUMBSTICK_LEFT予約済
215VK_GAMEPAD_RIGHT_THUMBSTICK_UP予約済
216VK_GAMEPAD_RIGHT_THUMBSTICK_DOWN割当無し
217VK_GAMEPAD_RIGHT_THUMBSTICK_RIGH割当無し
218VK_GAMEPAD_RIGHT_THUMBSTICK_LEFT割当無し
219VK_OEM_4OEM4キー[{
220VK_OEM_5OEM5キー\|
221VK_OEM_6OEM6キー]}
222VK_OEM_7OEM7キー
223VK_OEM_8OEM8キー
224予約済
225VK_OEM_AXOEM固有
226VK_OEM_102OEM102キー\_
227VK_ICO_HELPOEM固有
228VK_ICO_00
229VK_PROCESSKEYIME PROCESSキー
230VK_ICO_CLEAROEM固有
231VK_PACKETキーボード以外の入力手段に使用される
32ビット仮想キー値の下位ワード
232割当無し
233VK_OEM_RESETOEM固有
234VK_OEM_JUMPOEM固有
235VK_OEM_PA1OEM固有
236VK_OEM_PA2OEM固有
237VK_OEM_PA3OEM固有
238VK_OEM_WSCTRLOEM固有
239VK_OEM_CUSELOEM固有
240VK_OEM_ATTNOEM固有
241VK_OEM_FINISHOEM固有
242VK_OEM_COPYOEM固有
243VK_OEM_AUTOOEM固有
244VK_OEM_ENLWOEM固有
245VK_OEM_BACKTABOEM固有
246VK_ATTNAttnキーAttn
247VK_CRSELCrSelキーCrSel
248VK_EXSELExSelキーExSel
249VK_EREOFErase EOFキー
250VK_PLAYPlayキー
251VK_ZOOMZoomキー
252VK_NONAME予約済
253VK_PA1PA1キー
254VK_OEM_CLEARClearキー
901VK_RRETURN

使い方

キーをクリック

KBD関数の第一引数にクリックするキーの仮想キーコードを指定します。

UWSC
KBD(キーコード)

以下はAをクリックする例です。第一引数のみ指定した場合はそのキーをクリックします。

UWSC
KBD(VK_A)

キー入力が反応しない場合は、対象のウィンドウがアクティブになっていない可能性があるので、その場合はまずCTRLWIN関数でアクティブにしてからキー入力をします。以下はキー入力の対象がメモ帳の場合の書き方です。

UWSC
DIM ID = GETID("メモ帳")
CTRLWIN(ID, ACTIVATE)

KBD(VK_A)

キーを長押しする(一定時間押し続けてから離す)

Bを3秒間押し続けてから離します。

UWSC
KBD(VK_B, DOWN)
SLEEP(3.000)
KBD(VK_B, UP)

第三引数に時間を指定するとその時間だけ待機してから実行されるので、以下のように書き換えることもできます。時間はミリ秒なので3秒は1000倍して3000ミリ秒となります。

UWSC
KBD(VK_B, DOWN)
KBD(VK_B, UP, 3000)

一定時間待機後にキーをクリック

1秒間待機してからCをクリックします。

UWSC
KBD(VK_C, CLICK, 1000)

ショートカットキーを実行

ショートカットキーを実行するにはSCKEY関数を使うのが簡単ですが、KBD関数でも修飾子キーを押した状態で仮想キーを押すことで実行することもできます。修飾子キーとはCtrlShiftAltのことです。

修飾子キーが単数

修飾子キーが単数の場合、KBD関数で修飾子キーを押し下げた状態のままにし仮想キーをクリック、修飾子キーを離すという動作を行うことで実行することができます。

これをプログラムで書くと以下のようになります。

UWSC
KBD(修飾子キー, DOWN)
KBD(仮想キーコード[, CLICK])
KBD(修飾子キー, UP)

SCKEY関数を使って書くと以下のようになります。

UWSC
SCKEY(0, 修飾子キー, 仮想キーコード)

仮想キーコード一覧Shift列Shiftを押したまま対応キーを押すことで実行でき、これをプログラムにすると以下のようになります。対応キーには仮想キーコード一覧の値、もしくは変数名を指定します。

UWSC
KBD(VK_SHIFT, DOWN)
KBD(対応キー[, CLICK])
KBD(VK_SHIFT, UP)

例えば、_(アンダーバー)を入力するには、キーボードでShift\と入力するようにKBD関数でもShiftを押したまま\をクリックする処理を書きます。

\(対応キー)または_(Shift列)を仮想キーコード一覧の表から探すと、値が226VK_OEM_102OEM102キー)が該当するキーであることがわかり、Shiftと一緒に押すことで_を入力することができます。実行した結果がわかるように、以下のプログラムではメモ帳に入力しています。

UWSC
DIM ID = EXEC("notepad")
CTRLWIN(ID, ACTIVATE)

KBD(VK_SHIFT, DOWN)
KBD(VK_OEM_102)
KBD(VK_SHIFT, UP)
修飾子キーが複数

修飾子キーが複数になっても基本的に1つのときと同じです。まずすべての修飾子キーを押したままの状態にしてから仮想キー(修飾子キー以外は)をクリックし、これまでに押した修飾子キーをすべて離します。仮想キーは修飾子キーをすべて押した状態にしたあとにクリックします。

UWSC
KBD(修飾子キー1, DOWN)
KBD(修飾子キー2, DOWN)
KBD(仮想キーコード[, CLICK])
KBD(修飾子キー2, UP)
KBD(修飾子キー1, UP)

以下はCtrlShiftESCを押し、タスクマネージャーを起動します。修飾子キーのCtrlShiftを押したままの状態にしてからESCをクリックし、修飾子キーを離します。

UWSC
KBD(VK_CTRL, DOWN)
KBD(VK_SHIFT, DOWN)
KBD(VK_ESC, CLICK)
KBD(VK_CTRL, UP)
KBD(VK_SHIFT, UP)

修飾子キーが2つの場合も、SCKEY関数を使うと以下のように書けます。

UWSC
SCKEY(0, 修飾子キー1, 修飾子キー2, 仮想キーコード)

タスクマネージャーの起動は以下のようになります。

UWSC
SCKEY(0, VK_CTRL, VK_SHIFT, VK_ESC)

修飾子キーが3つのときは以下のようになります。

UWSC
KBD(修飾子キー1, DOWN)
KBD(修飾子キー2, DOWN)
KBD(修飾子キー3, DOWN)
KBD(仮想キーコード[, CLICK])
KBD(修飾子キー3, UP)
KBD(修飾子キー2, UP)
KBD(修飾子キー1, UP)

SCKEY関数に書き換える場合は以下のようになります。

UWSC
SCKEY(0, 修飾子キー1, 修飾子キー2, 修飾子キー3, 仮想キーコード)

キーに変数を使う

キーに変数を使う場合は仮想キーコード一覧の定数名に対応する値を探し、KBD関数の第一引数にその値を指定します。

例えばVK_Aに対応する値は65なので、Aと入力するには以下のように書きます。

UWSC
KBD(65)

これは以下のように仮想キーコードで指定するのと同じ結果を返します。

UWSC
KBD(VK_A)

変数の場合キーコードで指定するのとは違い、連続する文字列を簡単に指定することもできます。

以下はAFを仮想キーコードで指定する書き方です。

UWSC
KBD(VK_A)
KBD(VK_B)
KBD(VK_C)
KBD(VK_D)
KBD(VK_E)
KBD(VK_F)

変数を使って書くと以下のようになります。

UWSC
FOR key = 65 TO 70
	KBD(key)
NEXT

仮想キーコードは定数なので以下のように書くとわかりやすくなります。

UWSC
FOR key = VK_A TO VK_F
	KBD(key)
NEXT

プログラム実行例

メモ帳の右クリックメニューを表示させる

UWSC
DIM ID = EXEC("notepad")
CTRLWIN(ID, ACTIVATE)

KBD(VK_APPS, CLICK, 1000)
解説

パソコンの音量を上げる

パソコンの音量を上げます。Windows2000以降のOSの場合は仮想キーの操作で音量を上げ、Windows 2000より前のOSの場合はボリューム調整ツールを操作することで音量を上げます。

UWSC
IFB KINDOFOS() >= 12 THEN
	KBD(VK_VOLUME_UP)
ELSE
	ID = EXEC("SNDVOL32.exe /t")
	SETSLIDER(ID, GETSLIDER(ID, 1) - 10)
ENDIF
解説

パソコンの音量を下げる

パソコンの音量を下げます。Windows2000以降のOSの場合は仮想キーの操作で音量を下げ、Windows 2000より前のOSの場合はボリューム調整ツールを操作することで音量を下げます。

UWSC
IFB KINDOFOS() >= 12
	KBD(VK_VOLUME_DOWN)
ELSE
	ID = EXEC("SNDVOL32.exe /t")
	SETSLIDER(ID, GETSLIDER(ID, 1) + 10)
ENDIF
解説

特定のキーを連打する

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
SETHOTKEY(VK_SPACE, EMPTYPARAM, "toggle")

PUBLIC flg = FALSE

WHILE TRUE
	DIM msg = "Spaceキーで切り替え<#CR>ESCキーで終了<#CR>"
	IFB flg THEN
		FUKIDASI(msg + "連打中")
		KBD(VK_A, CLICK)
		SLEEP(0.100)
	ELSE
		FUKIDASI(msg + "停止中")
	ENDIF
WEND

PROCEDURE forceQuit()
	EXITEXIT
FEND

PROCEDURE toggle()
	flg = !flg
	SLEEP(0.500)
FEND

日本語入力を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)
使用関数

関連記事

SCKEY関数 (スクリプト関数)
ショートカットキーを実行します。
LOCKHARD関数 (スクリプト関数)
LOCKHARDEX関数 (スクリプト関数)