我有一个程序可以在 Windows 8.1 上打开一个窗口(实际上是一个视频游戏)。然后,该程序以我编译的 C++ .DLL 的形式调用“扩展”。在该 DLL 中,我需要获取调用 DLL 的程序(视频游戏)窗口的句柄。我可以使用 FindWindow 命令结合视频游戏窗口的名称来执行此操作。但是,有时我需要一次打开它的 2 个副本,两者都具有相同的窗口名称。这意味着使用 FindWindow(windowName) 不能保证选择我真正想要的窗口。有没有办法获取与调用 C++ 代码的应用程序相同的窗口的句柄,而无需指定名称?
问问题
2093 次
2 回答
1
EnumWindow
对于您从中获得的每个匹配的窗口,windowName
您可以检查HWND's
进程并选择一个属于您正在运行的进程的进程。这可以使用GetWindowThreadProcessId函数来完成 - 它会给您窗口所属进程的 PID,而您可以将其与GetCurrentProcessId中的您自己的 PID 进行比较。
于 2015-07-14T14:58:41.080 回答
1
您可以结合FindWindowEx枚举具有给定名称的所有窗口(设置hwndParent
为NULL
使用桌面作为父级,并hwndChildAfter
在第二次搜索时传递上一个结果,依此类推)与GetWindowThreadProcessId和GetCurrentProcessId找出哪个窗口属于您被调用的同一个线程。
但是话又说回来 - 为什么不直接将窗口句柄传递给 dll 呢?
于 2015-07-14T15:01:31.290 回答