VBScript(WSH)で「SendKeys("{LEFT}") が反応しない」を解決した方法
VBScript(WSH)で「SendKeys("{LEFT}") が反応しない」を解決した方法
Amazonレポート取得の自動化にて、SendKeysを使ってカレンダーのクリックをサポートしようとスクリプトを組んでいました。
「カレンダー表示させて、leftボタンで必要数戻って」なんて簡単に考えていたのですが、SendKeys(”{LEFT}”)が無反応。1マスも動きません。
もうね、原因特定にまる1日使ってしまいましたよ。
これが出来ないと次の段階のデータ加工の自動化に影響が出るので必死でした。
最悪JavaScriptのブックマークレットで強引に処理しようかと思ったくらいです。
(SendKeysとJavaScriptブックマークレットどちらの方がスマートなのかわからないですけど...)
実装したかった事
下の画像の通りです。

どこでどうPOSTしているか解析してその項目を変更しても良かったのですが、カレンダー入力をそのまま制御した方が早い。
という事でカレンダー操作をエミュレートしようとしました。
PCキーボード操作で「カレンダーに照準があったら『矢印キー』で操作可能」である事までは調査済みです。
発生した症状
これらの操作をスクリプトに落として、SendKeys(”{LEFT}”)で過去に移動となるはずがカレンダーの黒枠(選択)が全く動かない...。
もう一度キーボードから操作してみると...動く...。
「何が原因だ?」
もうね、いろいろ試しましたよ。
Shift押しながら(+{LEFT})なら動くかとか、Ctrl 押しながら(^{LEFT})なのかとか、Leftって小文字じゃなきゃダメ?とか。
色々試してみた結果全てダメ。
そりゃそうですよね、キーボードからは左矢印PUSHで動くのだからShiftだCtrlだとかは不要で、それ以外のどこかで問題が発生してると思った方が良いわけです。
判明した原因
色々やってるときにカーソルが動く時がありました。
でも自分で意図してテストしている場所ではなかったので今度はなぜ動いているかがわからない。
で、程なくするとまた動かなくなるという状態。
でもね、解明できましたよ。まる1日かかったけど...。
『NumLock』がONになっていると矢印操作が動かない
こんなこともあるんですね。
別のパートでは何もしなくても左矢印操作を受けてくれてたのである程度自動で操作してくれてるのか?
そんなことを考えていたのですが『SendKeys』と『NumLock』の間には既知のエラーがあったようです。
SendKeys を実行するとNumLock キーがオフになる現象を回避
記事読むと今回の件とは直接関係はないのですが念のため。
まとめ
原因判明後「Numlockの状態把握してON/OFFのスイッチャー作ればいいんじゃね?」と思い実装してみましたが、このカレンダーではうまく作動しませんでした。
なんだろ、タイミング?
ちなみに、NumLockのスイッチャーコードはこんな感じ
'VBScriptではNumLockのステータス確認ができないのでワードを利用してチェックする
'Word起動
Set objWord = CreateObject("Word.Application")
'NumLockステータス確認※ONの時TRUEが返る
NumOnBL= objWord.NumLock
'Word終了
objWord.Quit
'スイッチャー用object起動
Set WshShell = CreateObject("WScript.Shell")
'NumLockがONの時OFFにする
IF NumOnBL=TRUE THEN WshShell.SendKeys "{NUMLOCK}"
'オブジェクト初期化
Set WshShell = Nothing
さぁ今日も頑張りますか!


