tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルIE8で複数起動されたブラウザを強制終了したい
記事No11034
投稿日: 2013/02/04(Mon) 12:23
投稿者ぱぱ
【環境】
  OS  :windows7
  言語:vb2008

【ご質問】
 現在、ウィンドウズ上に複数起動されたIEブラウザのタイトル名を取得し、該当するIEであれば
 終了するといった外部アプリを作成しております。
 プロセス一覧を取得し、IEブラウザを終了する動作は正常にいっているのですが、
 ブラウザを複数起動した場合に、IEのメインタイトルは取得できますが、サブタイトル??が
 取得できずにIEブラウザが終了しない場合があります。
 vb初心者ですので、すごく初歩的な質問をしているかもしれませんが、
 ご教授よろしくお願い致します。
 現在コーディング中のソースを下記に添付致します。

'IEのプロセス一覧取得
Dim ps As Process() = Process.GetProcessesByName("iexplore")
For Each p As System.Diagnostics.Process In ps

    'ウィンドウタイトル取得
    strWkTitle = Trim(p.MainWindowTitle) ←メインタイトルしか取得できない。

    If strWkTitle <> "" Then
    '該当するIEブラウザであれば終了させる処理
    End If
Next

[ツリー表示へ]
タイトルRe: IE8で複数起動されたブラウザを強制終了したい
記事No11036
投稿日: 2013/02/05(Tue) 00:09
投稿者VBレスキュー(花ちゃん)
>  サブタイトル??が
>  取得できずにIEブラウザが終了しない場合があります。

このサブタイトルとはどのようなものでしょうか?
HTML ファイル上に右クリックした時のプロパティのダイアログの上方に表示される
ものを指しておられるのでしょうか?

下記で取得できますか?
できないとなると、URL で判断するとかできませんか?
逆に全て閉じて必要なものを再起動するとか。

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
   Dim objWindows As SHDocVw.ShellWindows
   Dim objIE As SHDocVw.InternetExplorer
   Dim intLoop As Integer

   objWindows = New SHDocVw.ShellWindows
   For intLoop = objWindows.Count - 1 To 0 Step -1
      objIE = objWindows.Item(intLoop)
      If ("HTMLDocumentClass" = TypeName(objIE.Document)) Then
         Debug.Print(objIE.Document.Title)
         If objIE.Document.Title = "削除したいタイトル名" Then
            '該当するIEブラウザであれば終了させる処理
            objIE.Quit()
         End If
      End If
   '   System.Runtime.InteropServices.Marshal.ReleaseComObject(objIE)
   '   objIE = Nothing
   Next
  ' System.Runtime.InteropServices.Marshal.ReleaseComObject(objWindows)
  ' objWindows = Nothing
End Sub

※ この場合、このプログラムを実行したからと言って、タスクマネージャに iexplore.exe が
   増えるわけではないので、変に ReleaseComObject を実行すると逆にエラーが発生し、OS を
  再起動しないと直らない場合の弊害の方が多いので、コメント にしておいて下さい。
  但し、終了させた場合、その分タスクマネージャから iexplore.exe が消えている事を確認
  しておいて下さい。
  私のテスト結果では、このプログラムにおいては、ReleaseComObject を実行しない方が問題が
  発生しなかった事、又、IE を操作する場合、Option Strict Off で実行時バインディング
  (レイトバインディング)で操作する方が無難かと思います。
  もう少し、テストしてからサンプル投稿用掲示板の方にでも投稿します。
  2013/02/07/ 9:32 追加修正

  サンプル投稿用掲示板の方に投稿した分
  http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=333

[ツリー表示へ]
タイトルRe^2: IE8で複数起動されたブラウザを強制終了したい
記事No11044
投稿日: 2013/02/05(Tue) 15:03
投稿者ぱぱ
> このサブタイトルとはどのようなものでしょうか?
> HTML ファイル上に右クリックした時のプロパティのダイアログの上方に表示される
> ものを指しておられるのでしょうか?

返信遅くなりまして申し訳ありません。
頂いたソースを読み解くまでに時間がかかってしまって。

サブタイトルとは、「VBレスキュー(花ちゃん)」様の仰られるダイアログ上方のタイトルの事です。
頂いたソースを実行する事で、画面上に起動した全てのブラウザのタイトルを取得する事ができました。
.Netには本当に色々な機能があるのですね。
本当にありがとうございます。

[ツリー表示へ]
タイトルRe^3: IE8で複数起動されたブラウザを強制終了したい
記事No11053
投稿日: 2013/02/05(Tue) 23:45
投稿者VBレスキュー(花ちゃん)
> .Netには本当に色々な機能があるのですね。
誤解しないで下さいね、サブタイトルがどのようなものを指しているのか解らないので
とっさに思いついた VB6.0 用のコードを .NET 系でも動作するようにして試してもらったもので
もっといい方法(.NET らしい)があるかも知れません。

[ツリー表示へ]