スポンサーリンク

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)


参考

下記の質問への回答として執筆いたしました。

UWSCにてIEでサイトを開いた後に、アクティブ化してもスクロール…
http://q.hatena.ne.jp/1448291148