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

问题描述 投票:1回答:1

我在C#中使用keybd_event win api调用,我想模拟特殊按键,如alt + f4,alt + tab等。我的程序可以处理“简单”键按下,例如shift + p,altgr + w和简单使用tab,或者输入也可以工作,但是当存在两个特殊按钮时(对于特殊按钮我指的是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();
c# winapi
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.