次のように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
- 4824 IEXPLORE
次の実行:
- 4824 - - IEXPLORE
- 3208 - - IEXPLORE
- 4864 - IDソフトウェア - WindowsのInternet Explorerを - IEXPLORE
私はthis postについて読んだことがありますが、私の問題はそれ以上解決されませんでした。とにかくやや異なる方向)。
なぜ私は空のMainWindowTitleが1つしかないのですか?
達成しようとしていることはありますか? – Yahia
複数のInternet Explorerウィンドウが開いている場合は、それぞれのタイトルのウィンドウを一覧表示してユーザーに通知したいと考えています。これの背後にある理由は、Internet Explorerウィンドウのスクリーンショットを自動的に作成できるようにすることです(Webアプリケーションのテストに使用され、エラーの場合はこの情報を処理します)。 – Gorgsenegger
これが助けになるかどうかわかりません(私に教えてください)。しかし、あなたはそれをあなたの利点に利用することができます。すなわち、IE(とその種類のほとんどすべての 'オートメーション')を使用すると、いくつかの「アドホック」トリックを使用する必要があります。例えば。あなたのケースでは、プロセスの '.MainWindowHandle'とあなたが既に使っているタイトルを確認することができます。空の場合はタブです。もしあなたがもっと情報を得るなら、あなたは本当のウィンドウを選んだり、それに近いでしょう。問題は、IEのバージョンではそのことが変わるため、調整する必要があるということです。 – NSGaga