【发布时间】:2015-07-14 14:02:04
【问题描述】:
我有一个程序可以在 Windows 8.1 上打开一个窗口(实际上是一个视频游戏)。然后,该程序以我编译的 C++ .DLL 的形式调用“扩展”。在该 DLL 中,我需要获取调用 DLL 的程序(视频游戏)窗口的句柄。我可以使用 FindWindow 命令结合视频游戏窗口的名称来执行此操作。但是,有时我需要一次打开它的 2 个副本,两者都具有相同的窗口名称。这意味着使用 FindWindow(windowName) 不能保证选择我真正想要的窗口。有没有办法获得与调用 C++ 代码的应用程序相同的窗口的句柄,而无需指定名称?
【问题讨论】:
-
为什么不能只将窗口句柄传递给游戏中的 dll?
-
帖子标题混乱
-
是的,对那里的标题感到抱歉。应该先有证据阅读。我无法从游戏内部将窗口句柄传递给 DLL,因为游戏使用了一种特殊的脚本语言,它可以调用外部 DLL 中的函数,但不能从游戏脚本本身内部调用任何标准语言代码。
-
@Jordan 脚本语言是否以任何不透明的方式(不调用 WinAPI)提供对窗口句柄的访问,例如 Qt 吗?如果是这样,您可以将其作为
void*传递并将其转换为HWND。如果没有,脚本语言也有可能在应用程序的事件循环内执行 - 如果是这样,您可以尝试在 DLL 中调用GetActiveWindow()msdn.microsoft.com/en-us/library/windows/desktop/…,如果从消息循环中调用它会得到你的窗口:)
标签: c++ windows dll findwindow