2009-07-16 15 views
1

にプロセスのMainWindowHandleを取得:私はこのようなC#でプロセスを開始するのC#

Process p= new Process(); 
p.StartInfo.FileName = "iexplore.exe"; 
p.StartInfo.Arguments = "about:blank"; 
p.Start(); 

時々私はすでに(私はコントロールできないもの)を実行しているInternet Explorerのインスタンスを持っている、と私はつかむしようとすると、 MainWindowHandle of p:

p.MainWindowHandle 

私はプロセスがすでに終了しているという例外があります。

私はInternetExplorerオブジェクトに添付できるように、MainwindowHandleを取得しようとしています。

これをIEの複数のインスタンスで実行するにはどうすればよいですか?

答えて

1

Process.MainWindowHandleは、プロセスがまだ開始されていないか、すでに終了している場合にのみ、例外を送出します。

この場合は例外をキャッチする必要があります。

private void Form1_Load(object sender, EventArgs e) 
{ 

    Process p = new Process(); 
    p.StartInfo.FileName = "iexplore.exe"; 
    p.StartInfo.Arguments = "about:blank"; 
    p.Start(); 

    Process p2 = new Process(); 
    p2.StartInfo.FileName = "iexplore.exe"; 
    p2.StartInfo.Arguments = "about:blank"; 
    p2.Start(); 

    try 
    { 
     if (FindWindow("iexplore.exe", 2) == p2.MainWindowHandle) 
     { 
      MessageBox.Show("OK"); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Failed: Process not OK!"); 
    }  
} 


private IntPtr FindWindow(string title, int index) 
{ 
    List<Process> l = new List<Process>(); 

    Process[] tempProcesses; 
    tempProcesses = Process.GetProcesses(); 
    foreach (Process proc in tempProcesses) 
    { 
     if (proc.MainWindowTitle == title) 
     { 
      l.Add(proc); 
     } 
    } 

    if (l.Count > index) return l[index].MainWindowHandle; 
    return (IntPtr)0; 
} 
+0

? – Saobi

+0

FindWindow(文字列タイトル、intインデックス)は、特定のインデックスのインスタンスを返します。戻り値の型をProcessに変更し、l [index] .MainWindowHandleの代わりにl [index]を返すだけです。返されたプロセスの.CloseMainWindow()を呼び出します。 – SuperPro

+0

@Saobi - p.MainWindowHandleは、p.Start()で作成されたIEインスタンスを指します。別のインスタンスではありません。 しかし、p.MainWindowHandleがp.Start()の直後にアクセスされた場合、プロセスはまだ実際にSTARTEDを持っていない可能性があります。 p.WaitForInputIdleを見てください。 –

1

IE8を使用していますか?その場合は、起動したiexplore.exeが別の子プロセスを生成し、すぐに終了します。あなたのプロセスオブジェクトは、終了したieへのリンクを保持します。

は、詳細はこの参照してください:私はiexplore.exeを実行中の2つのインスタンスを持っている場合、プロセスを閉じることができますかHow to obtain process of newly created IE8 window?

+0

IE8に関するご意見ありがとうございます – rpattabi

関連する問題