気難しいExplorerを手なずけるAutoItのプラクティス(補足)
Explorerの気難しい所以について、一点補足がある。
ExplorerをRun()で起動させた際(実はRun()だからではないのだが)、Explorerがバックグラウンドで開き、タスクバー上でピカピカ光りながら存在をアピールしだすことがある。タスクバーを自動的に隠す設定の人にとってこの挙動は腹立たしいことこの上なく、大体、そんなに存在をアピールしたいのであればフォアグランドで立ち上がればいいというのに!と突っ込みを入れたい。 一度この状態が発生してしまうと、Explorerは開いているにもかかわらずバックグラウンドなので操作が失敗するという最悪の状態に陥る。そして最初に思いつくであろう以下の回避コードは無残にも失敗する。
WinActivate($srcTitle)
RunWait()やWinWaitActive()が失敗するのも実はコイツが原因だったりもする。
結局のところこの挙動についてはその発生原因がつかめておらず、現状問題発生後の回避方法しか判っていない。もしその発生条件を知っている方がいたら教えて欲しいものだ。
Run()以下に下記コードを追加する。
Run(@ComSpec & " /c " & 'explorer /select, c:\temp\test.txt', "", @SW_HIDE) Sleep(500) ;ああ、スリープなんて本当は使いたくないのだが… WinSetState($srcTilte, "", @SW_RESTORE) WinActivate($srcTitle)
@SW_RESTOREによってピカピカが収まり、WinActivate()によりフォアグラウンドへ持ってくる(ピカピカのままだとフォアグランドにもってこれない)。ついさっき否定したばかりのSleep()は、残念ながら、これを入れないとSetState()に失敗してしまう。
うーん、しかし、なんかすごく汚いコードになってしまったなぁ。