UWSC

ここしばらくプログラミングを生業としてない。メインはOffice(Excel/Word/PowerPont)で各種ドキュメント作り。しかも半分ノマドワーカーぽくなっている。ノマドの時はVPNで社内ネットワークへログインする。その手順が結構めんどくさい。つーか、セキュリティ確保のため、一定時間使わないと勝手に切断される仕様。なので日に何回もログイン操作をする羽目になる。その操作はキーボード、マウス操作しながら1分かかっていた。こういう定型的な処理は自動化したいなと思ってぐぐってみたらUWSCが定番らしい。見よう見まねというか、記録されたコードを見ながらボチボチ手を入れてみた結果、40秒でログイン完了するのができた。

まぁ40秒放っておけばログインするからそのままでも良かったんだが、空き時間にちょこちょこ高速化を図る。最初にやったのはSLEEP()を削ること。回線(LTE/3G/WiFi/有線LAN)による応答時間の差異をSLEEP()で吸収してたけど、それをGETID()で目的のwindowが表示されるまでwaitするように変更。これでだいぶ早くなった。しかし呼び出されたActiveXの起動が完了するまで待つ部分はNG。

!IE.busy AND IE.readyState = 4

でもだめ。いろいろ調べてみると、そのActiveXが立ち上がるとGETALLWIN()が返すwindowが1つ増えることにわかった。名前もそれっぽい名前。なので

STATUS(ALL_WIN_ID[i], ST_TITLE)="hogehoge"

といった条件で、それが取得できるまでwaitするように変更。あとは文字列入力をKBD()からSENDSTR()やIE.document.forms[i].elements[j]に変更したら、20秒で完了するようになった。とりあえずここまで。