如何使keybd_event同时处理两次以上的按键
本文关键字:两次 keybd 何使 event 处理 | 更新日期: 2023-09-27 18:21:45
我在C#中使用keybd_event win-api调用,我想模拟特殊的按键,如alt+f4、1alt+选项卡hift+p、1altgr>+wtab或5nter1也可以工作,但当出现两个特殊按钮时(对于特殊按钮,我指的是3alt2、shift、ctrl3或功能按钮),它似乎什么都不会起作用。我的程序应该通过远程桌面处理多个表单,这就是为什么我使用这个keybd_event调用,但例如alt+f4即使在本地也无法工作(我在记事本上测试,但我无法用这个命令关闭它)。有人知道我做错了什么吗?有可能让它们发挥作用吗?
提前感谢!
编辑:
我创建了一个DLLImport类,在其中存储了所有的win-api调用。我也有一些辅助方法,例如:
private void PressAlt()
{
DLLImport.keybd_event(0xA0, 0x38, 0, 0);
}
private void ReleaseAlt()
{
DLLImport.keybd_event(0xA0, 0x38, 0x0002, 0);
}
对于选项卡,我在一个单独的方法中使用这个:
DLLImport.keybd_event(0x09, 0x0f, 0, 0); //press tab
DLLImport.keybd_event(0x09, 0x0f, 0x0002, 0); //release tab
我现在用测试它
PressAlt();
PressSpecial("tab");
ReleaseSpecial("tab");
ReleaseAlt();
从您发布的代码来看,至少有一个虚拟密钥代码的值似乎错误(此处为MSDN参考)。
例如,代码0xA0
是左移键(VK_LSHIFT
),您应该尝试0x12
(VK_MENU
)或0xA4
(VK_LMENU
)。
注意-CodeProject上有一个关于常见虚拟钥匙代码和扫描代码的有用摘要。