似乎sendmessage不能发送组合键?
本帖最后由 bester 于 2023-9-22 15:36 编辑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 https://www.52pojie.cn/thread-34546-1-1.html
大佬,这个msdn可以再分享一次吗?谢谢大佬
页:
[1]