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