• 締切済み

WSH の IE_OnQuitについて

こんにちわ。 掲題の件なんですが… Set objIE = WScript.CreateObject("InternetExplorer.Application","IE_") objIE.Visible=True を頭にスクリプトをLoopさせてるのですが、IE終了時に、簡単に書くと以下のような感じにしてます。 Sub IE_OnQuit() MsgBox "終了しました",,msgTitle WScript.Quit() End Sub で、質問したい内容は、ループ中にIEを閉じて再起動させたいのですが、ループ中に objIE.quit を書き込むと、当然サブプロシージャに飛んでしまいます。 これを回避する方法はないでしょうか? 出来ればIE_OnQuit()を書かずに、Alt + End とかを押すとIEを閉じるようにして、スクリプトを終了したいのですが、バカな私の頭ではいくら調べてもできませんでしたので。 すみませんが、ご教示頂けませんでしょうか。

みんなの回答

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

#1 Douglas_ です。 >Flashコンテンツを含むページを何百回何千回も表示させてるうちに >メモリリークでとんでもないメモリ消費量になってしまって…。  ちょっと古い記事ですが、 ●[VB]WebBrowser コントロールの Navigate メソッドによるメモリリーク http://support.microsoft.com/default.aspx?scid=kb;ja;418376 には、「回避策」として、「WebBrowser コントロールを利用しているアプリケーションを定期的に終了させて下さい。」とかかれていますが、 ●Windows XP、Windows Server 2003、または Windows Vista では、WebBrowser コントロール アプリケーションを使用すると、Msctf.dll コンポーネントでメモリ リークを発生します。 http://support.microsoft.com/kb/943510/ja には、その原因として、 ・[地域と言語のオプション] コントロール パネルの高度なテキスト サービスをオフにする] チェック ボックスがオフになっている。 ・LoadIMM レジストリ エントリの値が 16 進形式で 1 に設定されている。 と書かれており、それを逆の設定にすればよいのかなとも思われますし、お使いのOSが Windows XP/Vista の場合は、サービスパックまたは修正プログラムを当てると解決するとも書かれています。  Ore-no-ID さんの場合、何が原因かは判りかねますが、 >再起動すればメモリも解放されます ということでしたら、とりあえず、私の方法は NG かも知れません。  さて、それは置いといて、 >Flashコンテンツを含むページを何百回何千回も表示 していらっしゃるようですが、その目的が、単に「ページの html ソースを読む」というようなことでしたら、 Set objIE = WScript.CreateObject("InternetExplorer.Application","IE_") ではなくて、 http://okwave.jp/qa/q6120067.html#besta で私が紹介している「WinHttp ライブラリ」をお使いになるとメモリリークは発生しないかも知れません(不確かでごめんなさい)。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

>ループ中にIEを閉じて再起動 する理由が判然としませんが、最初に Set objIE = WScript.CreateObject("InternetExplorer.Application","IE_") として、OnQuitイベントのプリフィックス(下記URL参照)を指定していますので、 >objIE.quit >を書き込むと、当然サブプロシージャに飛んでしまいます。 ●COMオブジェクトを扱うメソッド http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh11/cformwsh11_03.html  ということは、 >ループ中にIEを閉じて再起動 するのであれば、"IE_" でない、IEオブジェクトを別途起動しておいて、それを閉じたり再起動したりするという段取りになるのではないかと存じます。  ということで、元々起動しておいたIEオブジェクトを objIE として、別のタブで開いたIEオブジェクトを objIE2 に Set して、プログラムの中では、objIE2 を扱うというのはいかがでしょうか? ●Internet Explorer 7でのIEオブジェクト作成方法・その1 http://www.happy2-island.com/vbs/cafe02/capter00711.shtml '---------------------------------------------------- Option Explicit Dim objIE Dim objIE2 Dim objShell Const navOpenInNewTab = &H800 Set objIE = WScript.CreateObject("InternetExplorer.Application", "IE_") objIE.Navigate "about:blank" objIE.Visible = True Set objShell = WScript.CreateObject("Shell.Application") Do objIE.Navigate2 "http://okwave.jp/qa/q7815458.html", navOpenInNewTab WScript.Sleep (2000) Set objIE2 = objShell.Windows.Item(objShell.Windows.Count - 1) MsgBox objIE2.Name objIE2.Quit Set objIE2 = Nothing Loop Sub IE_OnQuit() MsgBox "終了しました" Set objIE = Nothing Set objShell = Nothing WScript.Quit() End Sub

Ore-no-ID
質問者

補足

ご回答ありがとうございます。 IEを再起動させたい理由は、Flashコンテンツを含むページを何百回何千回も表示させてるうちにメモリリークでとんでもないメモリ消費量になってしまって…。 で、それを回避する事を学べばいいんですが、速効性が必要でして。 再起動すればメモリも解放されますので、20ページくらいを表示させたら再起動して…ってやると手っ取り早いかなと思った次第です。 しかしながら、ループの終了はIEを自ら閉じだ時点で終わらせたいので、すごく迷ってました。 自分でも調べてみますが、別タブを閉じて、また表示させることによってメモリが解放されるならば、それに越したことはありません。 ありがたいヒントに感謝いたします。 ちょっと頂いたコードをヒントに書いてみます。 出来上がるまでに少々時間を頂くかもしれませんが、ご了承頂ければと思います。

関連するQ&A