如果我有一个处理工作窗口的HANDLE,如何获得工作

时间:2010-07-07 09:23:26

标签: windows winapi process jobs

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

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

1 个答案:

答案 0 :(得分:1)

我找不到任何记录方式来获取进程绑定的作业;此外,我找不到任何记录的方法来枚举系统中的所有作业,除了WMI way,但是只能从XP开始工作(我不认为这是一个问题,因为你的目标是IE8)并且仅限于已命名的作业(如果IE8使用匿名作业对象,这实际上可能会出现问题)。

如果IE的工作在此列表中,那么道路就会走下坡路:只需在您可以获得的每个工作名称上使用OpenJobObject(或者,如果您设法通过工作名称上的某些启发式工具缩小工作范围,甚至更好)并使用IsProcessInJob检查您的流程句柄(您使用OpenProcess + GetWindowThreadProcessId获得)是否属于该作业;一旦你得到一场比赛,你就定了。记得关闭所有这些手柄! :)

在IE8使用的作业对象未命名的不幸事件中,整个事情变得更加困难。您可能需要使用几乎未记录的(由Microsoft,但在网上广泛记录)handle-enumeration技术来枚举相对于目标进程的所有句柄。然后,您可以过滤出作业对象句柄,并使用上述技术获得正确的句柄。

<小时/> 那么,为什么需要访问IE8使用的作业对象?