我在c#中开始一个这样的过程:
Process p= new Process();
p.StartInfo.FileName = "iexplore.exe";
p.StartInfo.Arguments = "about:blank";
p.Start();
有时我已经有一个运行Internet Explorer的实例(我无法控制的东西),当我尝试抓住p的MainWindowHandle时:
p.MainWindowHandle
我得到一个例外,说该过程已经退出。
我正在尝试获取MainwindowHandle,以便将其附加到InternetExplorer对象。
如何在运行多个IE实例的情况下完成此操作?
答案 0 :(得分: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;
}
答案 1 :(得分:1)
您使用的是IE8吗?如果是这样,那么您调用的iexplore.exe将生成另一个子进程,然后立即退出。您的Process对象将保存一个指向exited的链接。
有关详细信息,请参阅此处:How to obtain process of newly created IE8 window?