【问题标题】:How to make keybd_event handle more than two key presses at once?如何使 keybd_event 一次处理两个以上的按键?
【发布时间】:2013-07-10 14:05:23
【问题描述】:

我在 C# 中使用 keybd_event win api 调用,我想模拟特殊按键,例如 alt+f4alt+tab 和类似的。我的程序可以处理“简单”的按键,例如 shift+paltgr+w 和简单的使用tabenter 也可以工作,但是当出现两个特殊按钮时(对于特殊按钮,我的意思是 altshiftctrl 或功能按钮)它似乎什么也没做。我的程序应该通过远程桌面处理多种表单,这就是我使用这个 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】:

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

例如,代码 0xA0 是左 Shift 键 (VK_LSHIFT),您应该改用 0x12 (VK_MENU) 或 0xA4 (VK_LMENU)。

注意 - 有一个有用的常用虚拟键码和扫描码on CodeProject的总结。

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多