我在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();
从您发布的代码中,您看起来至少有一个虚拟键代码(MSDN reference here)的值不正确。
例如,代码0xA0
是左移键(VK_LSHIFT
),你应该尝试0x12
(VK_MENU
)或0xA4
(VK_LMENU
)。
注意 - 有一个有用的常见虚拟键代码和扫描代码on CodeProject的摘要。