UWSCでIEを自動操作する際に,sckey()で複数のキーを同時入力するサンプルコード
UWSCを使うと,WindowsのGUIプログラムやブラウザなどを自動操作できる。
その際に,GUIのウィンドウ上で「複数のキーを同時に押す」という処理のサンプルコード。
ショートカットキーを押すには,複数のキーを同時押しする必要がある
UWSCでは,KBD()という関数で,1つのキーの押下をエミュレートできる。
しかし,「シフトキーを押しながら…」のようなショートカット操作をするためには,複数のキーを同時押ししたい。
これを実現するのが SCKEY() 関数だ。
たとえば,IEを自動操作する際に,「検索ページ上で検索ボックスからフォーカスを外したい」という要望があるとする。
TABキーを押せばフォーカスが進むし,SHIFT+TABキーを押せばフォーカスは一つ手前に戻る。
下記のサンプルコードでは,フォーカスを一つ手前に戻してから,画面全体を下方向にスクロールしている。
// // UWSCマクロでIEを自動操作するサンプルコード // // ----- 設定項目 ----- // リクエスト送信対象のURL target_url = "http://www.yahoo.co.jp/"; // ----- 操作の開始 ----- // IEを起動 ie = createOLEobj("InternetExplorer.Application") // 起動中のIEを見えるように ie.visible = True // 位置調整(左上) window_id = HNDtoID( ie.hwnd ) ACW( window_id, 0, 0 ) // ブラウザの画面を最大化 CtrlWin( window_id, MAX ) // URLにジャンプ ie.Navigate( target_url ) ie_wait( ie ) // まず,検索ボックスからフォーカスを外す window_id = 0 sckey( window_id, VK_SHIFT, VK_TAB ) // shift + tab sleep( 2 ) // 下にスクロール kbd( VK_DOWN ) sleep( 1 ) kbd( VK_DOWN ) sleep( 1 ) kbd( VK_DOWN ) sleep( 1 ) msgbox( "処理が終了" ) // ----- ルーチン ----- // IEがビジー状態の間待ちます procedure ie_wait( ie ) repeat sleep( 0.1 ) until ( ! ie.busy ) and ( ie.readystate = 4 ) sleep( 0.2 ) fend
文字入力のカーソル(「|」の形で点滅する要素。キャレットと呼ぶ)が有効になっている間は,
上キーや下キーを押してもページをスクロールさせることができない。
なぜなら,文字入力中なので。
なので,文字入力を中止させるために,まずは検索ボックスからフォーカスを別の場所に移す必要があるのだ。
(DOMの用語で言うと,フォーカスをblurしている。)
こういう操作をスクリプトとして実装したい場合,まずは手動で試してみるとよい。
「キーボード操作だけで確実に実現できる」という手動の操作手順がはっきりしたら,その手順をスクリプトに一つずつ転記してゆけばよいのだから。
手動でのテストを抜きにして,いきなりスクリプトを組み始めると混乱してしまうので注意。
参考:
KBD | UWSC コバヤシ式
http://canal22.org/kansu/kbd/
- キーボードを操作する KBD(仮想KEY [,状態 ,ms] )
SCKEY | UWSC コバヤシ式
http://canal22.org/kansu/sckey/
- ショートカットキーを実行する。
- SCKEY(ウィンドウのID, キー [, キー, キー, ・・・・・・] )
落伍の後に・・・ IEのタブ操作をUWSCで行なう
http://escapemylife644.blog.fc2.com/b...
- sckey(IE, VK_CTRL,VK_TAB)