2011-12-09 60 views
5

Webブラウザを特定のURLで起動するアプリケーションがあります。 私のプログラムが終了した後、私が開いたウェブページ/タブを閉じたいと思っています。各タブのPIDでInternet ExplorerのタブのURLを取得する方法は?

パラメータaでEXEファイルを呼び出します。プロセス名b。 URL

私はC#のアプローチを使用 How to kill firefox child process/tab from Java/C++

詳細な問題に存在する文字列...

foreach (Process theprocess in processlist) { 
    if (theprocess.ProcessName == "iexplore") { 
     Console.WriteLine("Process: {0}\tID: {1}\tWindow name: {2}", 
      theprocess.ProcessName, theprocess.Id, theprocess.MainWindowTitle 
     ); 
    } 
} 

現在、私は、すべてのタブのプロセスIDを見つけることができる午前

..私はプロセスのウィンドウタイトルのみを取得することができ、IE8ではメインプロセスの1つのウィンドウタイトルしか表示されません。

Prov私は各タブのpidを持っています、どのようにタブのURLを見つける...とそのタブだけを殺すのですか?

私はSHDOCVWを使用して Access is denied - when trying to get the url (text) from address bar's handle

からこのヘルプを得ました。 。 。

foreach(InternetExplorer ieInst in new ShellWindowsClass()) Console.WriteLine(ieInst.LocationURL);

答えて

8

IE7以降のバージョンでは、コードの下になりますそのURLに一致する文字列を持つタブだけを削除します。

foreach (SHDocVw.InternetExplorer ieInst in new SHDocVw.ShellWindows()) 
    { 
     String url = ieInst.LocationURL; 
     if (url.Contains("google")) 
     { 
      ieInst.Quit(); 
     } 
    } 

特定のタブコードが集中する:

foreach (SHDocVw.InternetExplorer ieInst in new SHDocVw.ShellWindows()) 
    { 
     String url = ieInst.LocationURL; 
     if (url.Contains("google")) 
     { 
      int val = ieInst.HWND; 
      IntPtr hwnd = new IntPtr(val); 
      ShowWindow(hwnd, SW_MAXIMISE); 
      SetForegroundWindow(hwnd); 
     } 
    } 
+0

グレート情報が、なぜあなたは自分自身に話しているの? :o/ –

+2

Coz evryonがそれを見て、私が解決策を見つけてtatも共有するまで、ボディは応答しませんでした:P –

+2

このコードを使用すると2つのエラーが発生します。 "ShellWindowsClass()"の代わりに "ShellWindows()"を使用する必要があります。 –

3

各IExplorerインスタンスのURLを取得する方法があります。

"Microsoftインターネットコントロール"という参照をプロジェクトに追加します。

コードの一部は、それが動作するexeファイルとInterop.SHDocVw.dll

を生成

**foreach (SHDocVw.InternetExplorer ieInst in new SHDocVw.ShellWindowsClass()) 
     { 
      System.Console.WriteLine(ieInst.LocationURL); 
     }** 

です... :)

関連する問題