在另一个应用程序中创建一个子窗口
Create a child window inside another application
我正在尝试使用windows API用C++为PC游戏编写机器人程序。我设法找到了进程HANDLE
,它的ID
,最后找到了它的带有EnumWindows
的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注入到另一个进程中,并在那里创建窗口。也并非没有困难。
Windows具有线程亲和性。这意味着创建窗口的线程将处理该窗口的消息。此外,父子链中的所有窗口都应该由同一个线程处理。否则,坏事就会发生。
那么,你的代码是如何运行的?如果它是一个单独的可执行文件,那么最好将窗口作为顶级窗口,只需监控目标窗口的移动事件(例如使用UI Automation),并使窗口适当移动。
否则,您将需要将代码注入到游戏可执行文件中,并让它在适当的线程上创建窗口。我不建议那样做。
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 如何将一个窗口保留在另一个应用程序窗口的前面
- Qt:从另一个窗口访问公共对象
- 触发另一个窗口的菜单按钮
- 如何在Qt中管理另一个窗口?
- 如何仅在一个窗口中忽略注入的输入?
- Gtkmm - 关闭窗口然后显示另一个窗口的正确方法
- 发送到另一个窗口的鼠标移动消息不执行任何操作
- 为什么 SDL 在最后一个窗口关闭时不发出SDL_QUIT
- 无法更改另一个窗口内窗口的背景颜色
- 更改如何从另一个窗口从Mainwindow接收信号
- 如何在C 和QT中的另一个窗口中显示MainWindow的结果图像
- 如何在另一个窗口中正确创建 CMFCListCtrl
- OpenGL在一个窗口中有多个渲染上下文
- 设计一个窗口类
- 如何使用C 和OpenGL在Mac中创建一个窗口
- QT:将值从窗口传递到另一个窗口
- 如何获得一个窗口,以便在调整C++大小时保留绘制的对象