c++ - 在另一个应用程序中创建子窗口

标签 c++ winapi

我正在尝试使用 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/

相关文章:

c++ - libcurl 404检测

c++ - 奇怪的测试结果。当我不使用时,我的 win32 程序运行得更慢

c - 如何使用 C WinAPI 获取当前麦克风输入电平?

winapi - 检测 Windows 7 蓝牙堆栈

c++ - 按值发送数组作为参数?

C++ 可变参数

C++ weak_ptr.lock() 段错误

python - Python 方法的 OpenCV C++ 模拟

c - 初始化常用控件以使用 StatusBar(ICC_WIN95_CLASSES 与 ICC_BAR_CLASSES)

c - system() 未按预期使用 %ERRORLEVEL%