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