【问题标题】:Is it possible to programmatically set the state of the shift and control keys?是否可以以编程方式设置 shift 和 control 键的状态?
【发布时间】:2010-03-27 00:17:04
【问题描述】:

我问的原因是我正在考虑构建一个脚踏开关作为换档和控制键 - 两个开关,每只脚一个。

我计划为此使用Arduino 并编写一个小型 C# 应用程序来检测何时按下开关,然后设置切换或控制状态。我宁愿不必为 Arduino 编写键盘驱动程序,因为我希望它也能做其他事情。

【问题讨论】:

  • +1 好主意,如果踏板/按键分配可编程以在有人限制使用一只手或玩游戏时提供帮助,则更有用!

标签: keyboard


【解决方案1】:

是的,这是可能的,但您必须 pInvoke 到 Win32。看看keydb_event 电话。

[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

然后您可以调用:

keybd_event(0x10, 0, 0, 0);

打开 shift 键(即按下键),并且:

keybd_event(0x10, 0, 2, 0);

再次将其关闭(即向上键)。

第一个参数是要按下的键的十六进制值:

  • 0x10 = 班次
  • 0x11 = ctrl
  • 0x12 = alt

我刚刚在一个简单的 C# 应用程序中使用复选框来表示 shift 键。检查后,它会为我使用的任何应用程序“按住”shift键。

【讨论】:

  • 谢谢你,这正是我想要的!
  • 使用 try-finally 会更安全,这样在任何情况下都会释放 shift 键:ShiftKeyDown(); try { RunSomeCode(); } finally { ShiftKeyUp(); }。设置等待光标时我通常会这样做。
【解决方案2】:

如果您只对控制前台应用程序感兴趣,最简单的解决方案是向活动应用程序发送 WM_KEYDOWN 和 WM_KEYUP 消息,以便按下和释放踏板。

我可能弄错了(如果我错了,请随时纠正我!)但我相信创建一个实际系统级按键事件——例如让 Windows 为您创建 keydown/keyup 消息并正常工作,即使您在按住踏板时更改应用程序 - 您需要编写一个输入驱动程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多