0

我有一个程序可以在 Windows 8.1 上打开一个窗口(实际上是一个视频游戏)。然后,该程序以我编译的 C++ .DLL 的形式调用“扩展”。在该 DLL 中,我需要获取调用 DLL 的程序(视频游戏)窗口的句柄。我可以使用 FindWindow 命令结合视频游戏窗口的名称来执行此操作。但是,有时我需要一次打开它的 2 个副本,两者都具有相同的窗口名称。这意味着使用 FindWindow(windowName) 不能保证选择我真正想要的窗口。有没有办法获取与调用 C++ 代码的应用程序相同的窗口的句柄,而无需指定名称?

4

2 回答 2

1

EnumWindow对于您从中获得的每个匹配的窗口,windowName您可以检查HWND's进程并选择一个属于您正在运行的进程的进程。这可以使用GetWindowThreadProcessId函数来完成 - 它会给您窗口所属进程的 PID,而您可以将其与GetCurrentProcessId中的您自己的 PID 进行比较。

于 2015-07-14T14:58:41.080 回答
1

您可以结合FindWindowEx枚举具有给定名称的所有窗口(设置hwndParentNULL使用桌面作为父级,并hwndChildAfter在第二次搜索时传递上一个结果,依此类推)与GetWindowThreadProcessIdGetCurrentProcessId找出哪个窗口属于您被调用的同一个线程。

但是话又说回来 - 为什么不直接将窗口句柄传递给 dll 呢?

于 2015-07-14T15:01:31.290 回答