我想将Mac Eject Key重新映射到Insert中,特别是在Windows应用程序中模拟Ctrl + Insert,Alt + Insert,Shift + Insert和其他常用键组合。
哪个是弹出键的虚拟键代码?我找到了一些虚拟密钥表,但由于某种原因,永远不会包含弹出密钥。
答案 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
。
参考: