吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 803|回复: 1
收起左侧

[求助] 似乎sendmessage不能发送组合键?

[复制链接]
bester 发表于 2023-9-22 15:32
本帖最后由 bester 于 2023-9-22 15:36 编辑

[C++] 纯文本查看 复制代码
        HWND hw = FindWindowEx(0,0, L"Notepad", L"*无标题 - 记事本");
        SetForegroundWindow(hw);
        SendMessageA((HWND)0x000909E4, WM_SYSKEYDOWN, VK_CONTROL,0x201D0001);
        SendMessageA((HWND)0x000909E4, WM_SYSKEYDOWN, 'C', 0x202E0001);
        SendMessageA((HWND)0x000909E4, WM_SYSKEYUP, 'C', 0xC02E0001);
        SendMessageA((HWND)0x000909E4, WM_SYSKEYUP, VK_CONTROL, 0xC01D0001);


代码如上:

当然我知道可以用key_event和sendinput,我是好奇后台模拟按键是怎么做到的,仅此而已


文档参考:
SendMessage(hwnd, 0x0104, 0x00000012, 0x20380001);//(0x00000012 == VK_MENU(ALT键))
SendMessage(hwnd, 0x0104, 0x00000046, 0x20210001);//这一行可以省略(0x00000046 == 'F')
SendMessage(hwnd, 0x0106, 0x00000066, 0x20210001);//发送一个char 'f'
SendMessage(hwnd, 0x0105, 0x00000046, 0xE0210001);//这一行可以省略(0x00000046 == 'F')
SendMessage(hwnd, 0x0105, 0x00000012, 0xC0380001);//(0x00000012 == VK_MENU(ALT键))
————————————————————————————————————————————————
其中,0x0104表示WM_KEYDOWN,0x0106表示WM_CHAR,0x0105表示WM_KEYUP;
0x20380001、0x20210001、0xE0210001、0xC0380001具体说明:
0000 0000 xxxx xxxx 0000 0000 0000 0000
0-15位表示发送几遍,
16-23表示ALT、CTRL、NUM、CAPS等扫描键值,
24位表示是左ALT、CTRL还是右ALT、CTRL(通常为0),
25-28位保留
29位表示是否按下ALT ,1表示按下
30位表示上一个键的状态KEY DOWN OR UP,1为发送前的DWON状态,0为UP
31位表示:0表示键开始按下,1为开始释放。

————————————————————————————————————————————————
过程是这样的:
首先 发送了一个 ALT按下 //(WM_SYSKEYDOWN == 0x0104)
然后 发送了一个 'F'键      //这里省略可以实现同样功能 系统兼容性问题 建议发送这个键
然后 发送了一个 字符'f'    //(WM_SYSCHAR == 0x0106)
然后 抬起按键     'F'键     //这里省略可以实现同样功能 系统兼容性问题 建议发送这个键
最后 抬起按键     ALT键    //(WM_SYSKEYUP == 0x0105)
-------------------------------------------------------

之前曾经修改过keyData的16-23位为VK_MENU,第30位参数为1,但没效果

请看位29的说明!!

The value is 1 if the ALT key is down while the key is pressed;

当值为1时表示ALT键被按下!这不正是我需要的吗?于是把29位设置为1,函数调用变成

PostMessage(hWnd,WM_SYSKEYDOWN,0x41,1<<29);

经过测试,发现这个就是Alt+A的效果!! 记录一下免得 又便成了 找不到资料的傻子了
postmessage(edit1.handle,wm_keydown,vk_down,$20000000)

Ctrl : $10000000;  

Shift: $08000000;  

Alt:20000000
来源:
https://www.cnblogs.com/songtaoyu/p/3474628.html


https://learn.microsoft.com/zh-c ... utdev/wm-syskeydown 虚拟键码

https://learn.microsoft.com/zh-c ... v/virtual-key-codes 扫描码在扫描1生成

https://blog.csdn.net/pjl1119/article/details/6914902

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiawan 发表于 2023-9-23 12:45
https://www.52pojie.cn/thread-34546-1-1.html

大佬,这个msdn可以再分享一次吗?谢谢大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表