キーボード操作

 ここではJScriptキーボード操作する方法について紹介します。
スクリプト処理で、キーボードキーを押したかのような動作をさせます。
ただし、押し続けるような操作はできません。

前回までに紹介した、アプリケーション操作と組み合わせて使えば、世界が広がるかもしれません。

 AZアルファベットキー入力するには以下の関数を利用することで実現できます。
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文字ずつに表示されます。

 09数字キー入力するには以下のサンプルで実現できます。
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文字ずつに表示されます。

 F1F12ファンクションキー入力するには以下のサンプルで実現できます。
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文字表示されます。


アプリケーション操作へ 目次 マウス操作へ