VBScript(WSH)で「SendKeys(“{LEFT}”) が反応しない」を解決した方法
- 2020.10.03
- WSH/VBS備忘録
- Amazon, ECシステム, VBScript, Windows10, WSH, エラー改善, スクリプト備忘録, ひとりごと, 備忘録, 失敗例, 市場調査, 情報収集, 自作システム, 自動処理, 自動化

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のスイッチャーコードはこんな感じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
'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 |
さぁ今日も頑張りますか!
-
前の記事
VBScript(WSH)で組んだAmazonからの自動化レポート取得で発生したエラー 2020.10.02
-
次の記事
小売店舗のドメイントップの在り方って何だろうと考えてみた 2020.10.05
コメントを残す