1

我的应用程序试图抓取 IE8,在这里我们以某种方式获得了 Internet Explorer 窗口/UI 的句柄。现在我想获得 IE8 的工作句柄。一个想法是 - 首先使用 IE Window HANDLE 使用 GetWindowThreadProcessId() 确定进程 ID,但在此之后我被卡住了。

IE8 中有新的实现,这里打开的每个选项卡都是作业中的一个进程。因此,我们看到的 IE8 是作为一项工作进行管理的。

4

1 回答 1

1

我找不到任何记录在案的方法来获得流程所绑定的工作;另外,我找不到任何记录在案的方法来枚举系统中的所有作业,除了WMI 方式,它只能从 XP 开始工作(我认为这不是问题,因为你的目标是 IE8)并且只有命名作业(如果 IE8 使用匿名作业对象,这实际上可能是一个问题)。

如果 IE 的工作在这个列表中,那么这条路就是走下坡路:只需在您可以获得的每个工作名称上使用OpenJobObject(或者,如果您设法通过对工作名称的一些启发式方法来缩小工作范围,那就更好了)并使用IsProcessInJob检查您的进程句柄(通过OpenProcess + GetWindowThreadProcessId获得)是否属于该作业;一旦你得到一个匹配,你就设置好了。记得关闭所有这些句柄!:)

万一 IE8 使用的作业对象没有命名,那么整个事情就变得更加困难了。您可能需要求助于几乎未记录(由 Microsoft,但在网络上广泛记录)的句柄枚举技术来枚举与您的目标进程相关的所有句柄。然后,您可以只过滤掉作业对象句柄,并使用上述技术来获得正确的句柄。


顺便问一下,为什么需要访问 IE8 使用的作业对象?

于 2010-07-07T09:48:00.803 回答