kabuステーションの起動画面にユーザID、パスワードを入力するスクリプト(VPSでリモートデスクトップ切断時用)
リモートデスクトップ切断時も動作するAutoItスクリプトにはコツがある
Control系のコマンドを使う
ネット上にあるAutoItのサンプルスクリプトを見ると、よくWinActivateなどの関数を使い、ウィンドウを選択状態にしてから、自動操作を行うものが多いのですが、この「ウィンドウを選択状態にする」というところが、VPSのリモートデスクトップ切断時にはうまく動きません。
そこで、ウィンドウを選択状態にしなくても操作を行えるControlSendや、ControlClickなどの関数を使用すると、リモートデスクトップ切断時も普通に操作することができます。
ControlIdはWinAPI系のコマンドを使用して取得するのが確実
Controle~ではじまるAutoItのコマンドは、引数にControlIdというものを取ります。
これは、Windowsアプリケーション開発で用いられる概念で、開いているウィンドウがWindowsの内部で順番付けされたものです。
AutoItのコマンドを使って、
ウィンドウタイトル → ハンドルID(複雑なID)→ControlId
の順番に取得することができます。
; タイトルが「ログイン」である、kabuステーションのログインウィンドウが開くまで待機
; ウィンドウが開いたら、ハンドルIDを取得
Local $hWnd = WinWait("ログイン")
; autoItからWinAPIを使って、ハンドルIDからControlIdを取得
Local $ctrlID = _WinAPI_GetDlgCtrlID ( $hWnd )
; 画面タイトル、ControlIdを指定して、kabuステーションのログインウィンドウに
; パスワードを入力(ユーザIDは自動保存されている前提)
ControlSetText ( "ログイン", "", $ctrlID, "kabuステーションのパスワード" )
;「ログイン」ボタンを押す代わりに、「ENTER」を入力
ControlSend ("ログイン", "", $ctrlID, "{ENTER}")
kabuステーションログイン用AutoItスクリプト全文
; タイトルが「ログイン」である、kabuステーションのログインウィンドウが開くまで待機
; ウィンドウが開いたら、ハンドルIDを取得
Local $hWnd = WinWait("ログイン")
; autoItからWinAPIを使って、ハンドルIDからControlIdを取得
Local $ctrlID = _WinAPI_GetDlgCtrlID ( $hWnd )
; 画面タイトル、ControlIdを指定して、kabuステーションのログインウィンドウに
; パスワードを入力(ユーザIDは自動保存されている前提)
ControlSetText ( "ログイン", "", $ctrlID, "kabuステーションのパスワード" )
;「ログイン」ボタンを押す代わりに、「ENTER」を入力
ControlSend ("ログイン", "", $ctrlID, "{ENTER}")
; タイトルが「ログイン」である、kabuステーションのログインウィンドウが開くまで待機
; ウィンドウが開いたら、ハンドルIDを取得
Local $hWnd = WinWait("ログイン")
; autoItからWinAPIを使って、ハンドルIDからControlIdを取得
Local $ctrlID = _WinAPI_GetDlgCtrlID ( $hWnd )
; 画面タイトル、ControlIdを指定して、kabuステーションのログインウィンドウに
; パスワードを入力(ユーザIDは自動保存されている前提)
ControlSetText ( "ログイン", "", $ctrlID, "kabuステーションのパスワード" )
;「ログイン」ボタンを押す代わりに、「ENTER」を入力
ControlSend ("ログイン", "", $ctrlID, "{ENTER}")
タスクスケジューラで、kabuステーション起動後に動作するように設定する
上記のAutoItスクリプトを、ビルドするとexeファイルになるので、
タスクスケジューラで起動するように設定します。
コメント