如何让keybd_event一次处理两个以上的按键?

时间:2013-07-10 14:05:24

标签: c# winapi

我在C#中使用keybd_event win api调用,我想模拟特殊按键,例如 alt + f4 alt + 标签和类似的。我的程序可以处理“简单”按键,例如 shift + p altgr + w 并简单使用 tab enter 也有效,但当出现两个特殊按钮时(对于特殊按钮,我的意思是 alt shift ctrl 或功能按钮)它似乎什么都不做。我的程序应该通过远程桌面处理多个表单,这就是为什么我使用这个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();

1 个答案:

答案 0 :(得分:1)

根据您发布的代码,您看起来至少有一个虚拟键代码(MSDN reference here)的值不正确。

例如,代码0xA0是左移键(VK_LSHIFT),您应该尝试0x12VK_MENU)或0xA4({{ 1}})而不是。

注意 - 有一个有用的常见虚拟键代码和扫描代码on CodeProject的摘要。