C++在KEYBDYEVER()上用WMYKEYDOWN发送虚拟密钥

C++在KEYBDYEVER()上用WMYKEYDOWN发送虚拟密钥,c++,keyboard,C++,Keyboard,我想让我的程序发送这个第三方虚拟密钥VK_ALOGIN或带有WM_KEYDOWN的0xf7 因此,我尝试以下方法: keybd_event(0xf7, 0, 0, 0); 但是接收这个键盘消息的程序只接收VK_ALOGIN,而不接收WM_KEYDOWN。那么,我是否可以使用WM_KEYDOWN发送0xf7 请注意,VK_ALOGIN不是Microsoft虚拟密钥。接收器可能正在查找密钥关闭和密钥打开。尝试同时发送两个 keybd_event( VK_ALOGIN, 0, 0, 0 ); key

我想让我的程序发送这个第三方虚拟密钥VK_ALOGIN或带有WM_KEYDOWN的0xf7

因此,我尝试以下方法:

keybd_event(0xf7, 0, 0, 0);
但是接收这个键盘消息的程序只接收VK_ALOGIN,而不接收WM_KEYDOWN。那么,我是否可以使用WM_KEYDOWN发送0xf7


请注意,VK_ALOGIN不是Microsoft虚拟密钥。

接收器可能正在查找密钥关闭和密钥打开。尝试同时发送两个

keybd_event( VK_ALOGIN, 0, 0, 0 );
keybd_event( VK_ALOGIN, 0, KEYEVENTF_KEYUP, 0 );


编辑:我删除了对SendInput的引用,因为现在我认为它与问题无关,而且我不确定我是否正确使用了SendInput。

Barmak,值0x45代表什么?Phillip,我更新了答案,添加了描述链接。第二个参数是密钥的硬件扫描代码。我不应该把0x45放在那里。第二个值通常被忽略。我想这只适合VK_NUMLOCK。我将编辑并删除它。将1作为第一个参数传递给SendInput从来都不是一个错误。请阅读以了解SendInput的发明原因,以及它解决了keybd_事件的哪些固有问题。@I不可检测,我的SendInput是对的还是错的?我把它放在一个固定参数为1的函数中可能有点奇怪,但没有错。这个答案是一场灾难,它甚至可能与这个问题无关。我只是想删除对SendInput的引用。
keybd_event( VK_ALOGIN, 0, KEYEVENTF_EXTENDEDKEY, 0 );
keybd_event( VK_ALOGIN, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0 );