如何使keybd_event同时处理两次以上的按键

本文关键字:两次 keybd 何使 event 处理 | 更新日期: 2023-09-27 18:21:45

我在C#中使用keybd_event win-api调用,我想模拟特殊的按键,如alt+f41alt+选项卡hift+p1altgr>+wtab5nter1也可以工作,但当出现两个特殊按钮时(对于特殊按钮,我指的是3alt2、shiftctrl3或功能按钮),它似乎什么都不会起作用。我的程序应该通过远程桌面处理多个表单,这就是为什么我使用这个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();

如何使keybd_event同时处理两次以上的按键

从您发布的代码来看,至少有一个虚拟密钥代码的值似乎错误(此处为MSDN参考)。

例如,代码0xA0是左移键(VK_LSHIFT),您应该尝试0x12VK_MENU)或0xA4VK_LMENU)。

注意-CodeProject上有一个关于常见虚拟钥匙代码和扫描代码的有用摘要。