哪个是Mac中用于弹出键的虚拟键

时间:2013-02-21 17:17:39

标签: macos keyboard

我想将Mac Eject Key重新映射到Insert中,特别是在Windows应用程序中模拟Ctrl + Insert,Alt + Insert,Shift + Insert和其他常用键组合。

哪个是弹出键的虚拟键代码?我找到了一些虚拟密钥表,但由于某种原因,永远不会包含弹出密钥。

2 个答案:

答案 0 :(得分:1)

问:Mac 中弹出键的虚拟键是哪个?

答:没有。

关于 HID Usage Tables for Universal Serial Bus,Eject 不是按键而是实际上是 HID 使用 - 来自消费者使用页面的一次性控制。

<块引用>

3.4.1.4 一次性控制 (OSC)
One Shot Control 是一个触发单个事件或动作的按钮。 One Shot Control 编码为 1 位 值并声明为逻辑最小值和逻辑最大值为 0 和 1 的相对、首选、主要项目, 分别。从 0 到 1 的转换会启动一个事件。在 1 到 0 的转换中什么也没有发生,但在另一个转换之前需要它 事件可以发生。一个例子是消磁。

在消费者使用页面 (0x0C) 上,弹出使用 ID 定义为:

<头>
使用 ID 使用名称 使用类型 部分
B8 弹出 OSC 15.7

如果您想从支持 USB HID 的 Arduino(例如 Leonardo)中伪造 Eject 按键,您可以使用以下代码来实现,该代码发送 Control-Shift-Eject 以锁定屏幕...

// NicoHood's HID-Project
#include "HID-Project.h"

void setup() {
  // Make pin 2 an input and turn on the pull-up resistor
  // so it goes high unless connected to ground:
  pinMode(2, INPUT_PULLUP);

  Keyboard.begin();

  // Sends a clean report to the host.
  // This is important on any Arduino type.
  Consumer.begin();
}

void loop() {
  // Control-Shift-Eject locks the screen
  if (digitalRead(2) == LOW) {
    Keyboard.press(KEY_LEFT_CTRL);
    Keyboard.press(KEY_LEFT_SHIFT);

    // This is a One Shot Command so doesn't need a "release"
    Consumer.write(HID_CONSUMER_EJECT);

    // Debounce
    delay(100);
    while (digitalRead(2) == LOW)
      delay(100);

    // Release Control-Shift keys
    Keyboard.releaseAll();
  }
}

至于对来自 Windows 的 Eject 按键做出反应,除非它作为与媒体控制相关的 WM_ 事件之一引发,我希望您必须编写一个 USB HID/ACPI 驱动程序来检测并引发 OSC 本身。

>

Sample buttons in ACPI for device running Windows 10 desktop editions 演示了从消费者页面捕获其他一些 OSC(例如音量增量/减量),您可能会对此进行扩展以包括弹出。

抱歉,我帮不上什么忙,但希望这会为您指明正确的方向。

答案 1 :(得分:0)

我知道这个问题已在几年前提出,但也许有些人仍在寻找答案,最终会找到这个问题......

RehabMan的 VoodooPS2Controller 中的VoodooPS2Keyboard.cpp行1805表示Mac上用于弹出键的虚拟键是 0x92

参考:

https://github.com/RehabMan/OS-X-Voodoo-PS2-Controller/blob/master/VoodooPS2Keyboard/VoodooPS2Keyboard.cpp