- 締切済み
WSH(JScript)既に開いているIEのビジー
.run で起動させた物がIEである場合、 そのIEの .busy や .readyState を取得したいと考えています。 たとえば以下の様な感じです。 var shApp = WScript.CreateObject("Shell.Application"); var iehandle; // 起動されてなければ実行する if(launchflag == 0){ var objSh = WScript.CreateObject("WScript.Shell"); objSh.Run("実行するとIEが起動するVBS等"); } //////// Aの地点 /////////////// // 対象ウィンドウが無いか探す for(i= 0; i< shApp.Windows().Count; i++){ // ここで対象のIEが見つればTrue if(shApp.Windows().item(i).FullName.match(/iexplore.exe$/i) && shApp.Windows().item(i).document.title.match(/対象のIEタイトル/i)){ iehandle = i; break; } } while(shApp.Windows().item(iehandle).document.readyState == "complete"){WScript.Sleep(100);} // 起動したのを確認してすぐ次の処理へ この例だとAの地点(その↓のif文の判定)で原因不明のエラーがでます。 ただ、WScript.Sleep(2000);などを入れて待機すると問題無く動作するので IEが起動しきる前に参照しようとしてエラーになっているのではないかと思われます。 どの様にするべきでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Prome_Lin
- ベストアンサー率42% (201/470)
「VBScript」ですが、私が以前、いろいろ調べて Set i = CreateObject("InternetExplorer.Application") Set w = CreateObject("WScript.Shell") i.Visible = True i.FullScreen = True i.Navigate "https://www.google.co.jp" Do While i.Busy = True Or i.readyState <> 4 Loop w.AppActivate i.LocationName WScript.Sleep(10000) i.Document.getElementsByName("q")(0).Value = "ABC" WScript.Sleep(2000) i.Document.all("btnG").Click WScript.Sleep(10000) i.Quit w.Run "Shutdown.exe -s -t 00" Set w = Nothing Set i = Nothing というのを組みました。 自分自身、よく分かっていないのですが、 Do While i.Busy = True Or i.readyState <> 4 Loop が、「Busy」の処理だと思われます。
お礼
ご回答ありがとうございます。 回答者さんのコードはIEオブジェクトによるBusy取得になりますので 申し上げ難いですが質問には該当しません。 今回の件に関しては HTMLソースの取得が早すぎる為起きたものと思われます