我正在尝试使用 Windows API 为 PC 游戏编写 C++ 机器人。我设法用 EnumWindows
找到了进程 HANDLE
、它的 ID
和最后它的 HWND
。我还设法将消息发送到它的窗口(使用 SendMessage
)以模拟击键。由于游戏全屏运行,我想在其中创建一个带有自定义控件的子窗口,以便轻松打开/关闭机器人,但我遇到了问题。我试图注册一个窗口类并创建一个以游戏的 HWND
作为父级的窗口,但我什么也看不到。这是我用来创建子窗口的代码(不起作用):
// ... Window class registering etc...
HWND hChild = CreateWindowEx(0,
"MyWindowClass",
"Title",
WS_CHILD | WS_VISIBLE,
0, 0, 100, 100,
hParent,
NULL,
AHInstance,
NULL); // Parent is a valid window handle from another process
老实说,我不是一个熟练的 Windows API 程序员,这整件事对我来说都是新的。我什至不确定这样做是否正确。
[编辑] 当我最小化/最大化游戏时,我的窗口会正确显示一两秒钟。似乎游戏的渲染发生在我的窗口渲染之后。任何想法?那么消息呢?我应该管理它们吗?游戏是否会将消息转发到我的窗口?
最佳答案
从不同进程运行代码不会取得太大成功。跨进程父/子关系很少起作用。特别是如果其他进程不期望它。这不是你轻易接受的事情。该功能仅作为与 16 位 Windows 的兼容性 sop 存在。今天没有地方使用这种技术。
在我看来,您不需要以这种方式设置窗口的父级似乎是合理的。如果您不需要它成为其他进程中窗口的子级,请不要那样做。
如果您确实需要它成为其他进程的子进程,那么您可能会有麻烦。也许您可以将一个 DLL 注入(inject)到另一个进程中并在那里创建窗口。也并非没有困难。
关于c++ - 在另一个应用程序中创建子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23160955/