【问题标题】:How to obtain process of newly created IE8 window?如何获取新建IE8窗口的进程?
【发布时间】:2009-10-14 18:21:20
【问题描述】:

当使用.NET的Process.Start运行IE8的iexplore.exe时,如果你已经打开了另一个IE8窗口,那么你刚刚启动的iexplore.exe进程会立即退出,它的子进程会附加到主进程IE8 进程。这样做的结果是您的 Process 对象将链接到已经退出的“调用者”进程,而不是正在运行的子进程。您想要对 Process 对象执行的任何操作都会导致 InvalidOperationException 告诉您进程已退出。

如何获取链接到实际子 IE8 进程的 Process 对象?

【问题讨论】:

    标签: .net process internet-explorer-8


    【解决方案1】:

    作为一种解决方法,您可能希望强制 IE 启动一个新实例(传递 -nomerge 命令行参数):

    Process objProcess = Process.Start("IEXPLORE.EXE", "-nomerge http://google.com/");
    

    【讨论】:

      【解决方案2】:

      我使用非最佳解决方案来实现 - 在运行 iexplore.exe 之前获取所有 iexplore.exe 进程 ID 的列表,然后在调用 iexplore.exe 后再次获取相同的列表。在两个列表之间进行比较,额外的 PID 将是我创建的那个。这当然在某些情况下不起作用(其他应用程序或用户在检测代码运行时启动了额外的 iexplore.exe 进程,或者 IE 作为内部维护任务对进程进行了某种重新排列/重新创建)。

      【讨论】:

      • 其实我并没有这样做。我真正想要的是 Hwnd 而不是 PID(用于控制这个 IE)。于是我得到了调用前后IE的Hwnd列表来查找新创建的窗口。
      猜你喜欢
      • 1970-01-01
      • 2014-11-15
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 2017-08-12
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多