在另一个应用程序内创建子窗口 我试图用Windows API编写一个C++游戏机。我通过EnumWindows找到了进程HANDLE、进程的ID以及进程的HWND。我还设法将消息发送到它的窗口(使用SendMessage)以模拟击键。由于游戏是全屏运行的,我想在里面创建一个带有自定义控件的子窗口来轻松打开/关闭机器人,但是我遇到了问题。我试图注册一个窗口类,并创建一个以游戏的HWND为父窗口的窗口,但我什么也看不到。这是我用来创建子窗口(不工作)的代码:

在另一个应用程序内创建子窗口 我试图用Windows API编写一个C++游戏机。我通过EnumWindows找到了进程HANDLE、进程的ID以及进程的HWND。我还设法将消息发送到它的窗口(使用SendMessage)以模拟击键。由于游戏是全屏运行的,我想在里面创建一个带有自定义控件的子窗口来轻松打开/关闭机器人,但是我遇到了问题。我试图注册一个窗口类,并创建一个以游戏的HWND为父窗口的窗口,但我什么也看不到。这是我用来创建子窗口(不工作)的代码:,c++,winapi,C++,Winapi,老实说,我不是一个熟练的windows API程序员,这一切对我来说都是新鲜事。我甚至不确定这样做是否正确 [编辑]当我最小化/最大化游戏时,我的窗口会正确显示一两秒钟。游戏的渲染似乎是在渲染我的窗口之后进行的。有什么想法吗?那么信息呢?我是否应该管理它们?游戏是否要将消息转发到我的窗口?如果从不同的进程运行代码,您将不会取得多大成功。跨流程父/子关系很少起作用。尤其是当另一个进程不期望它时。这件事你可不能掉以轻心。该功能仅作为16位Windows的兼容性sop存在。如今,这种技术已无用武之地

老实说,我不是一个熟练的windows API程序员,这一切对我来说都是新鲜事。我甚至不确定这样做是否正确


[编辑]当我最小化/最大化游戏时,我的窗口会正确显示一两秒钟。游戏的渲染似乎是在渲染我的窗口之后进行的。有什么想法吗?那么信息呢?我是否应该管理它们?游戏是否要将消息转发到我的窗口?

如果从不同的进程运行代码,您将不会取得多大成功。跨流程父/子关系很少起作用。尤其是当另一个进程不期望它时。这件事你可不能掉以轻心。该功能仅作为16位Windows的兼容性sop存在。如今,这种技术已无用武之地

在我看来,您不需要以这种方式设置窗口的父级似乎是合理的。如果您不需要它在另一个进程中成为窗口的子窗口,请不要这样做

如果你确实需要它是另一个过程的孩子,那么你可能会遇到麻烦。也许您可以将DLL插入到另一个进程中,并在其中创建窗口。也不是没有困难

窗口已经关闭。这意味着创建窗口的线程将处理该窗口的消息。此外,父子链中的所有窗口都应由同一线程处理。否则

那么,您的代码是如何运行的?如果它是一个单独的可执行文件,那么最好将窗口作为顶级窗口,只需监视目标窗口中的移动事件(例如,使用),并让窗口适当地移动


否则,您需要将代码注入到游戏可执行文件中,并让它在适当的线程上创建窗口。我不建议这样做。

您可以尝试验证您的父hWnd是否适合使用WinSpy:
SetWindowPos
之类的实用程序将窗口移动到位
SetParent
将应用程序的子窗口设置为另一个应用程序。你可能必须首先让窗口成为你自己的孩子。好吧,你可能是对的,我会尝试将两个应用程序分开,如果我的窗口不舒服的话,可能会禁用全屏。你认为可以在游戏窗口画布上绘制信息吗?我知道很多程序已经可以做到这一点(比如FRAPS和FPS),但我仍然不确定,也许他们正在用一个看不见的顶层做同样的把戏window@napco您确定它是在同一画布上绘制的,而不是(例如)在透明(分层)顶层窗口上绘制的吗?如果你真的需要在同一块画布上画画,你必须在同一个过程中。请参阅,以获取有关如何执行此操作的一些提示。
// ... 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