キーボード操作
ここではJScriptでキーボード操作する方法について紹介します。 スクリプトの処理で、キーボードのキーを押したかのような動作をさせます。 ただし、押し続けるような操作はできません。 前回までに紹介した、アプリケーション操作と組み合わせて使えば、世界が広がるかもしれません。
アルファベットキー入力
A〜Zのアルファベットキーを入力するには以下の関数を利用することで実現できます。 Sleep()関数については、アプリケーション操作のウインドウをアクティブ状態にするを参照してください。
関数名 object.SendKeys( keys ); 関数説明 アプリケーションへキーストロークを送信する。 キーボードの文字のほとんどは単一のキーで表現されます。 キーボードの文字の中には、「Ctrl+Shift+Home」などのように、 いくつかのキーの組み合わせで表現されるものもあります。 キーボードの文字を1つ送信するには、その文字自身をkeys(引数)に指定します。 たとえば、Xキーを送信するには、keys(引数)に文字列、「"X"」を指定します。 引数 object・・・・・・WshShellオブジェクト keys・・・・・・・送信するキーストロークを文字列式。 設定例1:Aキーを送信する場合 object.SendKeys( "A" ); 設定例2:1キーを送信する場合 object.SendKeys( "1" ); 設定例3:!キーを送信する場合 object.SendKeys( "!" ); 設定例4:Ctrl+Shift+Sキーを送信する場合 object.SendKeys( "^+S" ); 設定例5:abCdEと連続で送信する場合 object.SendKeys( "abCdE" ); エンターキーなどの特殊キーは以下の表を参照して下さい。 [特殊キー文字]
キー | 設定文字列 | 備考 |
---|---|---|
F1 | {F1} | |
F2 | {F2} | |
F3 | {F3} | |
F4 | {F4} | |
F5 | {F5} | |
F6 | {F6} | |
F7 | {F7} | |
F8 | {F8} | |
F9 | {F9} | |
F10 | {F10} | |
F11 | {F11} | |
F12 | {F12} | |
+ | {+} | |
^ | {^} | |
% | {%} | |
~ | {~} | |
[ | {[} | |
] | {]} | |
{ | {{} | |
} | {}} | |
( | {(} | |
) | {)} | |
Space | " " | 半角スペース |
Shift | + | |
Ctrl | ^ | |
Alt | % | |
Home | {HOME} | |
End | {END} | |
Enter | {ENTER} | ~でも可 |
BackSpace | {BACKSPACE} | {BS}、{BKSP}でも可 |
Insert | {INSERT} | {INS}でも可 |
Delete | {DELETE} | {DEL}でも可 |
↑ | {UP} | |
↓ | {DOWN} | |
← | {LEFT} | |
→ | {RIGHT} | |
PageUp | {PGUP} | |
PageDown | {PGDN} | |
Esc | {ESC} | |
Tab | {TAB} | |
Caps Lock | {CAPSLOCK} | |
Num Lock | {NUMLOCK} | |
Scroll Lock | {SCROLLLOCK} | |
Break | {BREAK} | |
PRINT SCREEN | {PRTSC} | 画面のキャプチャ機能は反応しない |
[サンプルコード]
// // キーボード操作 // // メモ帳を起動してA〜Zキーを送信する。 // // Shell関連の操作を提供するオブジェクトを取得 var sh = new ActiveXObject( "WScript.Shell" ); // メモ帳を起動 sh.Run( "notepad.exe" ); // 起動してすぐにキー送信すると失敗する可能性があるので、3秒停止 WScript.Sleep( 3000 ); // A〜Zキーを0.1秒ごとに送信 sh.SendKeys( "A" ); WScript.Sleep( 100 ); sh.SendKeys( "B" ); WScript.Sleep( 100 ); sh.SendKeys( "C" ); WScript.Sleep( 100 ); sh.SendKeys( "D" ); WScript.Sleep( 100 ); sh.SendKeys( "E" ); WScript.Sleep( 100 ); sh.SendKeys( "F" ); WScript.Sleep( 100 ); sh.SendKeys( "G" ); WScript.Sleep( 100 ); sh.SendKeys( "H" ); WScript.Sleep( 100 ); sh.SendKeys( "I" ); WScript.Sleep( 100 ); sh.SendKeys( "J" ); WScript.Sleep( 100 ); sh.SendKeys( "K" ); WScript.Sleep( 100 ); sh.SendKeys( "L" ); WScript.Sleep( 100 ); sh.SendKeys( "M" ); WScript.Sleep( 100 ); sh.SendKeys( "N" ); WScript.Sleep( 100 ); sh.SendKeys( "O" ); WScript.Sleep( 100 ); sh.SendKeys( "P" ); WScript.Sleep( 100 ); sh.SendKeys( "Q" ); WScript.Sleep( 100 ); sh.SendKeys( "R" ); WScript.Sleep( 100 ); sh.SendKeys( "S" ); WScript.Sleep( 100 ); sh.SendKeys( "T" ); WScript.Sleep( 100 ); sh.SendKeys( "U" ); WScript.Sleep( 100 ); sh.SendKeys( "V" ); WScript.Sleep( 100 ); sh.SendKeys( "W" ); WScript.Sleep( 100 ); sh.SendKeys( "X" ); WScript.Sleep( 100 ); sh.SendKeys( "Y" ); WScript.Sleep( 100 ); sh.SendKeys( "Z" ); WScript.Sleep( 100 ); // a〜zキーを0.1秒ごとに送信 sh.SendKeys( "a" ); WScript.Sleep( 100 ); sh.SendKeys( "b" ); WScript.Sleep( 100 ); sh.SendKeys( "c" ); WScript.Sleep( 100 ); sh.SendKeys( "d" ); WScript.Sleep( 100 ); sh.SendKeys( "e" ); WScript.Sleep( 100 ); sh.SendKeys( "f" ); WScript.Sleep( 100 ); sh.SendKeys( "g" ); WScript.Sleep( 100 ); sh.SendKeys( "h" ); WScript.Sleep( 100 ); sh.SendKeys( "i" ); WScript.Sleep( 100 ); sh.SendKeys( "j" ); WScript.Sleep( 100 ); sh.SendKeys( "k" ); WScript.Sleep( 100 ); sh.SendKeys( "l" ); WScript.Sleep( 100 ); sh.SendKeys( "m" ); WScript.Sleep( 100 ); sh.SendKeys( "n" ); WScript.Sleep( 100 ); sh.SendKeys( "o" ); WScript.Sleep( 100 ); sh.SendKeys( "p" ); WScript.Sleep( 100 ); sh.SendKeys( "q" ); WScript.Sleep( 100 ); sh.SendKeys( "r" ); WScript.Sleep( 100 ); sh.SendKeys( "s" ); WScript.Sleep( 100 ); sh.SendKeys( "t" ); WScript.Sleep( 100 ); sh.SendKeys( "u" ); WScript.Sleep( 100 ); sh.SendKeys( "v" ); WScript.Sleep( 100 ); sh.SendKeys( "w" ); WScript.Sleep( 100 ); sh.SendKeys( "x" ); WScript.Sleep( 100 ); sh.SendKeys( "y" ); WScript.Sleep( 100 ); sh.SendKeys( "z" ); WScript.Sleep( 100 ); WScript.Echo( "終了" ); // オブジェクトを解放 sh = null;
[実行結果]
メモ帳が起動し、3秒後にA〜Z、a〜zが0.1秒間隔で1文字ずつに表示されます。
数字キー入力
0〜9の数字キーを入力するには以下のサンプルで実現できます。 Sleep()関数については、アプリケーション操作のウインドウをアクティブ状態にするを参照してください。 SendKeys()関数については、アルファベットキー入力を参照してください。
[サンプルコード]
// // キーボード操作 // // メモ帳を起動して0〜9キーを送信する。 // // Shell関連の操作を提供するオブジェクトを取得 var sh = new ActiveXObject( "WScript.Shell" ); // メモ帳を起動 sh.Run( "notepad.exe" ); // 起動してすぐにキー送信すると失敗する可能性があるので、3秒停止 WScript.Sleep( 3000 ); // 0〜9キーを0.1秒ごとに送信 sh.SendKeys( "0" ); WScript.Sleep( 100 ); sh.SendKeys( "1" ); WScript.Sleep( 100 ); sh.SendKeys( "2" ); WScript.Sleep( 100 ); sh.SendKeys( "3" ); WScript.Sleep( 100 ); sh.SendKeys( "4" ); WScript.Sleep( 100 ); sh.SendKeys( "5" ); WScript.Sleep( 100 ); sh.SendKeys( "6" ); WScript.Sleep( 100 ); sh.SendKeys( "7" ); WScript.Sleep( 100 ); sh.SendKeys( "8" ); WScript.Sleep( 100 ); sh.SendKeys( "9" ); WScript.Sleep( 100 ); WScript.Echo( "終了" ); // オブジェクトを解放 sh = null;
[実行結果]
メモ帳が起動し、3秒後に0〜9が0.1秒間隔で1文字ずつに表示されます。
F1〜F12キー入力
F1〜F12のファンクションキーを入力するには以下のサンプルで実現できます。 Sleep()関数については、アプリケーション操作のウインドウをアクティブ状態にするを参照してください。 SendKeys()関数については、アルファベットキー入力を参照してください。
[サンプルコード]
// // キーボード操作 // // メモ帳を起動してF5キーを送信する。 // // ファンクションキー文字 var KEY_F1 = "{F1}"; // F1キー var KEY_F2 = "{F2}"; // F2キー var KEY_F3 = "{F3}"; // F3キー var KEY_F4 = "{F4}"; // F4キー var KEY_F5 = "{F5}"; // F5キー var KEY_F6 = "{F6}"; // F6キー var KEY_F7 = "{F7}"; // F7キー var KEY_F8 = "{F8}"; // F8キー var KEY_F9 = "{F9}"; // F9キー var KEY_F10 = "{F10}"; // F10キー var KEY_F11 = "{F11}"; // F11キー var KEY_F12 = "{F12}"; // F12キー // Shell関連の操作を提供するオブジェクトを取得 var sh = new ActiveXObject( "WScript.Shell" ); // メモ帳を起動 sh.Run( "notepad.exe" ); // 起動してすぐにキー送信すると失敗する可能性があるので、3秒停止 WScript.Sleep( 3000 ); // F5キーを送信(メモ帳では現在の日付と時刻が出力されるショートカットキー) sh.SendKeys( KEY_F5 ); WScript.Echo( "終了" ); // オブジェクトを解放 sh = null;
[実行結果]
メモ帳が起動し、3秒後にシステム時刻とシステム日付が表示されます。 これは、メモ帳でF5キーを押すことで表示されるものです。
その他特殊キー入力
エンターキー、スペースキー等を入力するには以下のサンプルで実現できます。 Sleep()関数については、アプリケーション操作のウインドウをアクティブ状態にするを参照してください。 SendKeys()関数については、アルファベットキー入力を参照してください。
[サンプルコード]
// // キーボード操作 // // メモ帳を起動して特殊記号や矢印キー等を送信する。 // // 特殊キー文字 var KEY_PLUS = "{+}"; // +キー var KEY_CARET = "{^}"; // ^キー var KEY_PERCENT = "{%}"; // %キー var KEY_TILDE = "{~}"; // ~キー var KEY_BRACKET_L = "{[}"; // [キー var KEY_BRACKET_R = "{]}"; // ]キー var KEY_BRACE_L = "{{}"; // {キー var KEY_BRACE_R = "{}}"; // }キー var KEY_PARENTHESIS_L = "{(}"; // (キー var KEY_PARENTHESIS_R = "{)}"; // )キー var KEY_SPACE = " "; // Spaceキー var KEY_SHIFT = "+"; // Shiftキー var KEY_CTRL = "^"; // Ctrlキー var KEY_ALT = "%"; // Altキー var KEY_HOME = "{HOME}"; // Homeキー var KEY_END = "{END}"; // Endキー var KEY_ENTER = "{ENTER}"; // Enterキー var KEY_BACKSPACE = "{BACKSPACE}"; // BackSpaceキー var KEY_INSERT = "{INSERT}"; // Insertキー var KEY_DELETE = "{DELETE}"; // Deleteキー var KEY_ARROW_UP = "{UP}"; // ↑キー var KEY_ARROW_DOWN = "{DOWN}"; // ↓キー var KEY_ARROW_LEFT = "{LEFT}"; // ←キー var KEY_ARROW_RIGHT = "{RIGHT}"; // →キー var KEY_PAGE_UP = "{PGUP}"; // PageUpキー var KEY_PAGE_DOWN = "{PGDN}"; // PageDownキー var KEY_ESC = "{ESC}"; // Escキー var KEY_TAB = "{TAB}"; // Tabキー var KEY_CAPS_LOCK = "{CAPSLOCK}"; // Caps Lockキー var KEY_NUM_LOCK = "{NUMLOCK}"; // Num Lockキー var KEY_SCROLL_LOCK = "{SCROLLLOCK}"; // Scroll Lockキー var KEY_BREAK = "{BREAK}"; // Breakキー // Shell関連の操作を提供するオブジェクトを取得 var sh = new ActiveXObject( "WScript.Shell" ); // メモ帳を起動 sh.Run( "notepad.exe" ); // 起動してすぐにキー送信すると失敗する可能性があるので、3秒停止 WScript.Sleep( 3000 ); // 記号文字キーを0.1秒ごとに送信 sh.SendKeys( "!" ); WScript.Sleep( 100 ); sh.SendKeys( "\"" ); WScript.Sleep( 100 ); sh.SendKeys( "#" ); WScript.Sleep( 100 ); sh.SendKeys( "$" ); WScript.Sleep( 100 ); sh.SendKeys( KEY_PERCENT ); WScript.Sleep( 100 ); sh.SendKeys( "&" ); WScript.Sleep( 100 ); sh.SendKeys( "\'" ); WScript.Sleep( 100 ); sh.SendKeys( KEY_PARENTHESIS_L ); WScript.Sleep( 100 ); sh.SendKeys( KEY_PARENTHESIS_R ); WScript.Sleep( 100 ); sh.SendKeys( "-" ); WScript.Sleep( 100 ); sh.SendKeys( "=" ); WScript.Sleep( 100 ); sh.SendKeys( KEY_CARET ); WScript.Sleep( 100 ); sh.SendKeys( KEY_TILDE ); WScript.Sleep( 100 ); sh.SendKeys( "\\" ); WScript.Sleep( 100 ); sh.SendKeys( "|" ); WScript.Sleep( 100 ); sh.SendKeys( "@" ); WScript.Sleep( 100 ); sh.SendKeys( "`" ); WScript.Sleep( 100 ); sh.SendKeys( ";" ); WScript.Sleep( 100 ); sh.SendKeys( KEY_PLUS ); WScript.Sleep( 100 ); sh.SendKeys( ":" ); WScript.Sleep( 100 ); sh.SendKeys( "*" ); WScript.Sleep( 100 ); sh.SendKeys( "," ); WScript.Sleep( 100 ); sh.SendKeys( "<" ); WScript.Sleep( 100 ); sh.SendKeys( "." ); WScript.Sleep( 100 ); sh.SendKeys( ">" ); WScript.Sleep( 100 ); sh.SendKeys( KEY_BRACKET_L ); WScript.Sleep( 100 ); sh.SendKeys( KEY_BRACE_L ); WScript.Sleep( 100 ); sh.SendKeys( KEY_BRACKET_R ); WScript.Sleep( 100 ); sh.SendKeys( KEY_BRACE_R ); WScript.Sleep( 100 ); sh.SendKeys( "_" ); WScript.Sleep( 100 ); sh.SendKeys( KEY_SPACE ); WScript.Sleep( 100 ); sh.SendKeys( KEY_TAB ); WScript.Sleep( 100 ); WScript.Sleep( 1000 ); // Homeキー、Endキー、Enterキーの送信 sh.SendKeys( KEY_HOME ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ENTER ); WScript.Sleep( 100 ); sh.SendKeys( KEY_END ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ENTER ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ENTER ); WScript.Sleep( 100 ); WScript.Sleep( 1000 ); // 矢印キーの送信 sh.SendKeys( KEY_ARROW_UP ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ARROW_UP ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ARROW_RIGHT ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ARROW_RIGHT ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ARROW_RIGHT ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ARROW_RIGHT ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ARROW_RIGHT ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ARROW_LEFT ); WScript.Sleep( 100 ); sh.SendKeys( KEY_ARROW_DOWN ); WScript.Sleep( 100 ); WScript.Echo( "終了" ); // オブジェクトを解放 sh = null;
[実行結果]
メモ帳が起動し、3秒後に0〜9が0.1秒間隔でキーボードの記号を1文字ずつに表示されます。 その後、エンターキーや矢印キーの動作が入り、画面内でカーソルが動作します。
組み合わせ入力
Shiftキー、Ctrlキー、Altキー等のキーと組み合わせてキーの入力をするには以下のサンプルで実現できます。 組み合わせの代表格として、Altキー + F4キーです。 知ってのとおり、アプリケーションを終了させるショートカットキーです。 ここでは、そのように組み合わせての入力方法をサンプルで紹介します。 Sleep()関数については、アプリケーション操作のウインドウをアクティブ状態にするを参照してください。 SendKeys()関数については、アルファベットキー入力を参照してください。
[サンプルコード]
// // キーボード操作 // // キーを組み合わせて送信する。 // // 特殊キー文字 var KEY_SHIFT = "+"; // Shiftキー var KEY_CTRL = "^"; // Ctrlキー var KEY_ALT = "%"; // Altキー var KEY_ENTER = "{ENTER}"; // Enterキー var KEY_F1 = "{F1}"; // F1キー var KEY_F2 = "{F2}"; // F2キー var KEY_F3 = "{F3}"; // F3キー var KEY_F4 = "{F4}"; // F4キー var KEY_F5 = "{F5}"; // F5キー var KEY_F6 = "{F6}"; // F6キー var KEY_F7 = "{F7}"; // F7キー var KEY_F8 = "{F8}"; // F8キー var KEY_F9 = "{F9}"; // F9キー var KEY_F10 = "{F10}"; // F10キー var KEY_F11 = "{F11}"; // F11キー var KEY_F12 = "{F12}"; // F12キー // Shell関連の操作を提供するオブジェクトを取得 var sh = new ActiveXObject( "WScript.Shell" ); // メモ帳を起動 sh.Run( "notepad.exe" ); // 起動してすぐにキー送信すると失敗する可能性があるので、3秒停止 WScript.Sleep( 3000 ); // 「Shift」キーを押しながら「a」キーを押す sh.SendKeys( KEY_SHIFT + "a" ); WScript.Sleep( 1000 ); // 「Shift」キーを押しながら「a」キー、「b」キーを // 続けて押す sh.SendKeys( KEY_SHIFT + "(ab)" ); WScript.Sleep( 1000 ); // 「Alt」キーを押しながら「F4」キーを押す sh.SendKeys( KEY_ALT + KEY_F4 ); WScript.Sleep( 2000 ); // 保存ダイアログボックスが出るので「n」キーを // 保存しないを選択 sh.SendKeys( "n" ); WScript.Sleep( 1000 ); WScript.Echo( "終了" ); // オブジェクトを解放 sh = null;
[実行結果]
メモ帳が起動し、3秒後に「A」、「AB」の順で表示されます。 その後、保存ダイアログボックスが表示され、「いいえ」が選択されて終了します。 解説すると、文字が入力され、その後AltキーとF4キーによりアプリケーションが終了させようとしました。 すると、保存するかどうかのダイアログボックスが表示されます。 ここで、Nキーを入力することで「いいえ」を選択し、保存せずに終了ました。
一度の関数呼び出しで複数のキーを送信
今までは1つのキーの送信に対し、1つのSendKeys()関数を呼び出したサンプルしかなかったですが、ここでは複数のキーの送信を1つのSendKeys()関数で行う方法を紹介します。 以下のサンプルで実現できます。 Sleep()関数については、アプリケーション操作のウインドウをアクティブ状態にするを参照してください。 SendKeys()関数については、アルファベットキー入力を参照してください。
[サンプルコード]
// // キーボード操作 // // SendKeys()メソッドに複数の文字を設定する例。 // // 特殊キー文字 var KEY_ENTER = "{ENTER}"; // Enterキー var KEY_ARROW_UP = "{UP}"; // 上キー var KEY_ARROW_DOWN = "{DOWN}"; // 下キー var KEY_ARROW_LEFT = "{LEFT}"; // 左キー var KEY_ARROW_RIGHT = "{RIGHT}"; // 右キー // Shell関連の操作を提供するオブジェクトを取得 var sh = new ActiveXObject( "WScript.Shell" ); // メモ帳を起動 sh.Run( "notepad.exe" ); // 起動してすぐにキー送信すると失敗する可能性があるので、3秒停止 WScript.Sleep( 3000 ); // まとめてキーを送信 sh.SendKeys( "ABCDEF" + KEY_ENTER + "GHIJKLMN" + KEY_ARROW_LEFT + KEY_ENTER ); WScript.Echo( "終了" ); // オブジェクトを解放 sh = null;
[実行結果]
メモ帳が起動し、3秒後に1行目から「ABCDEF」、「GHIJKLM」、「N」の順で3行表示されます。 解説すると、「ABCDEF」の複数キーが送信され、次にエンターキーが送信されて2行目にカーソルが移動します。 その後、「GHIJKLMN」の複数キーが送信され、次に左キーが送信され、「M」と「N」の間にカーソルが移動します。 その次にエンターキーが送信されカーソルは3行目に移動し、「N」も3行目になります。
回数を指定して単一キーを送信
1つのキーに回数を指定して送信する方法は以下のサンプルで実現できます。 Sleep()関数については、アプリケーション操作のウインドウをアクティブ状態にするを参照してください。 SendKeys()関数については、アルファベットキー入力を参照してください。
[サンプルコード]
// // キーボード操作 // // 回数を指定して単一のキーを送信する例。 // // Shell関連の操作を提供するオブジェクトを取得 var sh = new ActiveXObject( "WScript.Shell" ); // メモ帳を起動 sh.Run( "notepad.exe" ); // 起動してすぐにキー送信すると失敗する可能性が // あるので、3秒停止 WScript.Sleep( 3000 ); // 回数を指定してキーを送信する sh.SendKeys( "{0 10}" ); WScript.Sleep( 100 ); sh.SendKeys( "{A 5}" ); WScript.Sleep( 100 ); sh.SendKeys( "{ENTER 5}" ); WScript.Sleep( 100 ); sh.SendKeys( "{TAB 5}" ); WScript.Sleep( 100 ); sh.SendKeys( "{! 5}" ); WScript.Sleep( 100 ); WScript.Echo( "終了" ); // オブジェクトを解放 sh = null;
[実行結果]
メモ帳が起動し、3秒後に0.1秒間隔で「0」が10文字、「A」が5文字、改行が5つ、タブ文字が5つ、最後に「!」が5文字表示されます。
アプリケーション操作へ | 目次 | マウス操作へ |