加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostMessage()来模拟c中的输入?

发布时间:2020-12-16 07:02:05 所属栏目:百科 来源:网络整理
导读:我正在尝试为游戏制作一个简单的僵尸程序.即使游戏失焦或最小化,我也希望它能够正常运行.因此,我不能使用SendInput()来模拟全局事件.我想出来,为了使这项工作,我必须使用PostMessage()函数.我制作了一个模拟记事本输入的测试程序: #include Windows.hHWND h
我正在尝试为游戏制作一个简单的僵尸程序.即使游戏失焦或最小化,我也希望它能够正常运行.因此,我不能使用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()时,权限被拒绝,并且没有返回句柄.

如果阻止此功能,有没有办法获得对另一个进程的“编辑”访问权限?

解决方法

当然,Windows永远不会让你这样做,如果你试图窃取用户的密码怎么办?当你没有焦点时,你不被允许接收输入!!

但你可能会在这里做一些技巧:你应该为鼠标或键盘编写一个钩子函数,这个函数应该在DLL(而不是你的EXE)中实现,使用SetWindowsHookEx安装它,然后在你的DLL中使用IPC机制发送鼠标和/或键盘消息到您的主要EXE.

但除此之外:虽然它通常起作用

HWND handle = FindWindow(NULL,CStringW("Untitled - Notepad"));

敌人没有任何意义,Windows必须获得至少一个字符串参数的大多数函数的版本:一个用于ANSI,其名称以A结尾,一个用于以W结尾的宽(UTF-16)字符.MSVC有额外的这个设计上的层称为TCHAR,并且使用define map将所有这些函数映射到ANSI或Wide,因此如果使用该版本的API,直接使用生成宽字符串的CStringW是不明智的.并且由于Windows API使用char *和wchar_t *,为什么要将字符串文字转换为CString,然后将其传递给函数?你应该使用其中一个:

// This also work with CStringA
HWND handleA = FindWindowA(NULL,"Untitled - Notepad");
// This also work with CStringW
HWND handleW = FindWindowW(NULL,L"Untitled - Notepad");
// This also work with CString
HWND handleT = FindWindow(NULL,_T("Untitled - Notepad") );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读