我需要向一个程序发送ctrl+v的按键消息。用PostMessage或者SendMessage都发现ctrl失效,不知问题出在哪里。现在说明如下:
我以windows的计算器(calc)为例子,选择科学型的16进制。
我的程序:
::PostMessage(AppWnd,WM_KEYDOWN,'C',MapVirtualKey('C',0));
::PostMessage(AppWnd,WM_KEYUP,'C',MapVirtualKey('C',0));
这两句可以正常运行,输入窗口出现C但是如果组合上ctrl就不行。
::PostMessage(AppWnd,WM_KEYDOWN,VK_CONTROL,MapVirtualKey(VK_CONTROL,0));
::PostMessage(AppWnd,WM_KEYDOWN,'C',MapVirtualKey('C',0));
::PostMessage(AppWnd,WM_KEYUP,'C',MapVirtualKey('C',0));
::PostMessage(AppWnd,WM_KEYUP,VK_CONTROL,MapVirtualKey(VK_CONTROL,0));
这四句运行不正常,ctrl不起作用。也就是说,CTRL C并没有启到copy的作用,或者说,这四句话没有实现向计算器发送ctrl + c的按键消息我不知道问题出在哪里,所有的按键,比如数字、字母,甚至F1-F12都可以成功发送唯独组合了ctrl或者shift还有alt就不行。特别提醒:
1. 我知道keybd_event是可以的,我也用keybd_event实现了ctrl + c 的组合功能。在这里,我希望得到不用keybd_event的解决方法。
2. ctrl+c只是一个组合键的例子,所以类似向程序发送剪贴板消息命令的方法就不用了,我需要的是组合按键消息希望高手们提出自己的思路,万分感谢!!
我以windows的计算器(calc)为例子,选择科学型的16进制。
我的程序:
::PostMessage(AppWnd,WM_KEYDOWN,'C',MapVirtualKey('C',0));
::PostMessage(AppWnd,WM_KEYUP,'C',MapVirtualKey('C',0));
这两句可以正常运行,输入窗口出现C但是如果组合上ctrl就不行。
::PostMessage(AppWnd,WM_KEYDOWN,VK_CONTROL,MapVirtualKey(VK_CONTROL,0));
::PostMessage(AppWnd,WM_KEYDOWN,'C',MapVirtualKey('C',0));
::PostMessage(AppWnd,WM_KEYUP,'C',MapVirtualKey('C',0));
::PostMessage(AppWnd,WM_KEYUP,VK_CONTROL,MapVirtualKey(VK_CONTROL,0));
这四句运行不正常,ctrl不起作用。也就是说,CTRL C并没有启到copy的作用,或者说,这四句话没有实现向计算器发送ctrl + c的按键消息我不知道问题出在哪里,所有的按键,比如数字、字母,甚至F1-F12都可以成功发送唯独组合了ctrl或者shift还有alt就不行。特别提醒:
1. 我知道keybd_event是可以的,我也用keybd_event实现了ctrl + c 的组合功能。在这里,我希望得到不用keybd_event的解决方法。
2. ctrl+c只是一个组合键的例子,所以类似向程序发送剪贴板消息命令的方法就不用了,我需要的是组合按键消息希望高手们提出自己的思路,万分感谢!!
SendInput/keybd_event必须要保证程序不是在后台运行,所以我不能用。
用PostMessage或者SendMessage来模拟键盘消息,我已经可以实现单个按键(数字、字母,甚至F1-F12),但是唯独对ctrl等特殊的按键,不知道如何去做 :)
Ctrl WM_KEYDOWN
C WM_KEYDOWN
C WM_KEYUP
Ctrl WM_KEYUP
类似于软键盘操作的时候,发送KEYDOWN使Ctrl变黑
0–15 Specifies the repeat count for the current message. The value is the number of times the keystroke is auto-repeated as a result of the user holding down the key. The repeat count is always one for a WM_KEYUP message.