【发布时间】:2012-11-07 23:42:38
【问题描述】:
我正在尝试为游戏制作一个简单的机器人程序。即使游戏失焦或最小化,我也希望它能够正常工作。因此,我不能使用 SendInput() 因为它模拟全局事件。我发现,要完成这项工作,我必须使用 PostMessage() 函数。我做了一个模拟记事本输入的测试程序:
#include <Windows.h>
HWND handle = FindWindow(NULL,CStringW("Untitled - Notepad"));
HWND edit = FindWindowEx(handle, NULL, CStringW("Edit"), NULL);
PostMessage(edit, WM_CHAR, 'a', 0 );
此示例成功模拟了在记事本中单击“a”,即使记事本失焦或最小化。我同样让鼠标事件也能正常工作。
但是,当我为我的游戏尝试同样的事情时,我无法发布点击命令。查了一下发现调用FindWindowEx()时获取了原来的句柄但是权限被拒绝,没有返回句柄。
如果阻止此功能,是否有办法获得对另一个进程的“编辑”访问权限?
【问题讨论】:
-
在调用 FindWindowEx 后调用 GetLastError 会得到什么?
-
另外,如果您的游戏窗口没有名为“编辑”的子窗口,它将返回 null。你应该 PostMessage 到调用 FindWindow 时获得的句柄来找到你的游戏的窗口句柄。
-
请编辑您的问题。您似乎正在尝试获取应用程序中不存在的窗口的句柄。
标签: c++ sendmessage sendkeys postmessage sendinput