2012-04-08 68 views
4

次のようにProcess.MainWindowTitleにアクセス...Process.MainWindowTitleは、1つのウィンドウ以外のすべてのウィンドウで常に空白なのはなぜですか?結果の配列を超える

Process[] processes = Process.GetProcessesByName("iexplore"); 

...そしてループは、私は常に、アレイ内のすべてが、1つのアイテムのための空にMainWindowTitleで終わります。私の場合、2つのInternet Explorerウィンドウが開いています.1つはタブが1つで、もう1つはタブが2つあります。

は私のコードを実行している私はいつも私が最後にアクティブだったウインドウとタブのMainWindowTitleを取得 - 他のすべてを空のまま。奇妙なことがMainWindowTitleが充填されるプロセスIDは常に同じであるということです - 私は私のコードを実行する前に、他のIEのウィンドウやタブをアクティブにする場合は、プロセスIDは常に同じです:

if (!processes.Any()) 
    { 
    MessageBox.Show("TODO - No matching process found"); 
    return; 
    } 

    if (processes.Count() > 1) 
    { 
    foreach (Process currentProcess in processes) 
    { 
     // More than one matching process found 
     checkedListBox1.Items.Add(currentProcess.Id + " - " + currentProcess.MainWindowTitle + " - " + currentProcess.ProcessName); 
    } 

    return; 
    } 

出力可能性がありしたがって、のような最初の実行のためになる: - - IEXPLORE

  • 3208 - - IEXPLORE
  • 4864 - グーグル - WindowsのInternet Explorerを -

    • 4824 IEXPLORE
    (事前に選択された他のIEウィンドウを持つ)

    次の実行:

    • 4824 - - IEXPLORE
    • 3208 - - IEXPLORE
    • 4864 - IDソフトウェア - WindowsのInternet Explorerを - IEXPLORE

    私はthis postについて読んだことがありますが、私の問題はそれ以上解決されませんでした。とにかくやや異なる方向)。

    なぜ私は空のMainWindowTitleが1つしかないのですか?

  • +0

    達成しようとしていることはありますか? – Yahia

    +0

    複数のInternet Explorerウィンドウが開いている場合は、それぞれのタイトルのウィンドウを一覧表示してユーザーに通知したいと考えています。これの背後にある理由は、Internet Explorerウィンドウのスクリーンショットを自動的に作成できるようにすることです(Webアプリケーションのテストに使用され、エラーの場合はこの情報を処理します)。 – Gorgsenegger

    +0

    これが助けになるかどうかわかりません(私に教えてください)。しかし、あなたはそれをあなたの利点に利用することができます。すなわち、IE(とその種類のほとんどすべての 'オートメーション')を使用すると、いくつかの「アドホック」トリックを使用する必要があります。例えば。あなたのケースでは、プロセスの '.MainWindowHandle'とあなたが既に使っているタイトルを確認することができます。空の場合はタブです。もしあなたがもっと情報を得るなら、あなたは本当のウィンドウを選んだり、それに近いでしょう。問題は、IEのバージョンではそのことが変わるため、調整する必要があるということです。 – NSGaga

    答えて

    1

    1つのオプションは、(上記のコメントを参照)BHOを実装することです。このシナリオではDWebBrowserEvents2::WindowStateChanged Eventが便利です。

    のBHOはCOMインターフェイスの束の実装であるとブラウザプロセスにロードされます/それらを実装するために、各タブ...最良の方法は、IMO C++です。

    しかし、確かにそうすることが可能です。(推奨しませんが)NET:

    3

    のInternet Explorerは、ホスティングモデルを使用していることを覚えておいてください - 1つのiexplore.exeをインスタンスは、Internet Explorerのフレームをホストし、他のiexplore.exeをインスタンスは、ちょうどタブの内容を表示します。

    トップレベルウィンドウでのみIEのインスタンスは、フレームをホストiexplore.exeをプロセスです。

    This記事は、さまざまなWebブラウザのマルチプロセスアーキテクチャについて説明します。私が理解しているように、ブラウザはマルチプロセスモデルに移行しています。つまり、あるWebページの障害が他のページに影響することはありません。 Thisの記事では、IEのマルチプロセスモデルについて詳しく説明します。 ESP - これはreliabely実現するために

    0

    私は同じ問題を抱えていました。 Teamviewer Hostでは、一部のアプリケーションにQuickConnectボタンがあります。私の場合はWinWord。 QuickConnectを削除または無効にすると、MainWindowTitleが強化されます

    関連する問題