没有合适的资源?快使用搜索试试~ 我知道了~
首页VC 利用postmessage和keybd_event给其他程序发送消息
VC 利用postmessage和keybd_event给其他程序发送消息
5星 · 超过95%的资源 需积分: 50 122 下载量 159 浏览量
更新于2023-06-11
评论 2
收藏 37KB DOCX 举报
VC 利用postmessage和keybd_event给其他程序发送消息,能成功发送CTRL/SHIFT/ALT键
资源详情
资源评论
资源推荐
向任意应用程序(包括后台的)发送任意按键消息(包括普通字符键、功能键、
Shift/Control/Alt 加任意按键的组合键),以实现自动执行特定功能,是一个用
途很广、很有实用价值的功能,很多人都受困于此,不得其解,本人也遇到这
种需求并受阻。刚开始查了很多资料和网上网友的解决方案,有些能起到一定
作用,但也有许多方案经试验证实不可行。尤其是关于发送 Shift/Control/Alt 加
任意按键的组合键这个问题,没有发现一个可行的方案,例如以下代码并不能
向指定 Window(hwnd)发送 Ctrl+C:
PostMessage hwnd,WM_KEYDOWN,VK_CONTROL,&H001D0001 '按下 Ctrl
键
PostMessage hwnd,WM_KEYDOWN,VK_C,&H002E0001 '按下 C 键
PostMessage hwnd,WM_KEYUP,VK_C,&HC02E0001 '释放 C 键
PostMessage hwnd,WM_KEYUP,VK_CONTROL,&HC01D0001 '释放 Ctrl 键
上例只能发送一个小写字母
c。
以下代码虽可以模拟 Ctrl+C 按键,但却不能向指定的后台窗口发送:
keybd_eventVK_Ctrl, 0, 0, 0 '按下 Ctrl 键
keybd_eventVK_C, 0, 0, 0 '按下 C 键
keybd_eventVK_C, 0, KEYEVENTF_KEYUP, 0 '释放 C 键
keybd_event VK_Ctrl, 0, KEYEVENTF_KEYUP, 0 '释放 Ctrl 键
难道真的没有解决这个问题的办法吗?我想这个应该是可以做到的呀!后来经
过反复的研究 Windows 的消息机制和键盘输入系统调用的资料,终于找到了解
决方案,并经试验成功证实。自己也是曾经受困于此,终得其解,不敢独享,
现拿出来献给广大同需此求的朋友,也让这个问题不再是少数“高手”们独享的
秘籍。
要实现向任意应用程序窗口发送模拟的按键,在不需激活该应用程序使其获得
输入焦点的情况下,首先必须取得要接收按键的窗口句柄,这要用到 Windows
API FindWindow 及 FindWindowEx,首先用 FindWindow 取得应用程序顶层
(Top Level)窗口的句柄,然后再用 FindWindowEx 取得要接收按键的子窗口或
控件的句柄,因为应用程序顶层窗口不一定就是接受按键的窗口(如
“NotePad.exe”记事本程序,实际接受按键的窗口是 Notepad 主窗口下的 Edit
控件),可以通过 ClassID 或 Caption 来查找。假设目标窗口的句柄已取得
(hwnd),然后要用 PostMessage 向该窗口发送按键消息,对于普通字符键,
直接用 WM_CHAR 消息最简单,如下:
PostMessage hwnd, WM_CHAR, Asc("A"), 0 ' 发送一个 A 字符
对于非普通字符按键,如功能键、方向键等,要用
WM_KEYDOWN、WM_KEYUP 消息,如下:
PostMessage hWndMsg, WM_KEYDOWN, VK_ESCAPE, &H00010001 ' 模拟
按下 Esc 键
PostMessage hWndMsg, WM_KEYUP, VK_ESCAPE, &HC0010001 ' 模拟抬
起 Esc 键
以上最后一个参数(lParam)低 16 位(0001)表示按键一次,高 8 位 00 表示
按下,C0 表示抬起,次高 8 位(01)表示该键的扫描码,可用 API
MapVirtualKey(VirtualKey, 0)取得(注意:扫描码在各系统可能会不同,在此以
具体数值示例,实际应用 MapVirtualKey 取得)。
下面要讲 Shift/Control/Alt 修饰键与其它按键的组合怎样发送,对于 Shift 和
Control 用以下方式(用到 API keybd_event):
keybd_event VK_SHIFT, &H2A, 0, 0 ' 模拟按下 SHIFT 键,&H2A 是
VK_SHIFT 的扫描码
PostMessage hWndMsg, WM_KEYDOWN, VK_A, &H001E0001 ' 模拟按下 A
键,SHIFT+A 产生一个大写 A 字符
PostMessage hWndMsg, WM_KEYUP, VK_A, &HC01E0001 ' 模拟抬起 A 键
keybd_event VK_SHIFT, &H2A, KEYEVENTF_KEYUP, 0 ' 模拟抬起 SHIFT
键
以上 VK_SHIFT(扫描码 2A)换成 VK_CONTROL(扫描码 1D)就可以实现
Ctrl 组合键,VK_A(扫描码 1E)也可以换成任意功能键,如 VK_F4(扫描码
3E)。
对于 Alt 修饰键比较特别,它属于系统按键,要用
WM_SYSKEYDOWN/WM_SYSKEYUP 消息,如下:
PostMessage hWndMsg, WM_SYSKEYDOWN, VK_F4, &H003E0001 Or
&H20000000 ' 模拟按下 Alt+F4
PostMessage hWndMsg, WM_SYSKEYUP, VK_F4, &HC03E0001 Or
&H20000000 ' 模拟抬起 Alt+F4
' &H20000000 为 context code 位,置 1 表示 Alt 键被按下
int i;
i=MapVirtualKey(VK_MENU,0);
::PostMessageA(hwnd,WM_SYSKEYDOWN,VK_MENU,0x00380
001 | 0x20000000);
剩余11页未读,继续阅读
oherry_yang
- 粉丝: 5
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论9