【问题标题】:Why my HID keyboard doesn't work very well?为什么我的 HID 键盘不能很好地工作?
【发布时间】:2021-02-26 08:37:15
【问题描述】:

我刚刚开始使用 V-USB 链接对我的 AtMega8 进行编程:https://www.obdev.at/products/vusb/index.html。我正在尝试让键盘女巫按下 CTRL+ALT。为此,我修改了项目“HID Keys”链接之一:https://www.obdev.at/products/vusb/hidkeys.html。我添加和修改:

//line 150, added definitions
#define KEY_DELETE 42
#define ALT_RIG    230 
#define ALT_LEF 226
#define CTRL_LEF    224

(我有这方面的定义值:https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf(来自第 53 页))

//line 204, modified code
static const uchar  keyReport[NUM_KEYS + 1][2] PROGMEM = {
/* none */  {0, 0},                     /* no key pressed */
/*  1 */    {0, KEY_A},
/*  2 */    {0, KEY_B},
/*  3 */    {0, KEY_C},
/*  4 */    {0, KEY_D},
/*  5 */    {0, KEY_E},
/*  6 */    {0, KEY_F},
/*  7 */    {0, KEY_G},
/*  8 */    {0, KEY_H},
/*  9 */    {0, KEY_I},
/* 10 */    {0, 0},
/* 11 */    {0, 0},
/* 12 */    {MOD_CONTROL_LEFT, ALT_RIG}, //CTRL+ALT
/* 13 */    {0, KEY_J},
/* 14 */    {0, KEY_K},
/* 15 */    {0, KEY_L},
/* 16 */    {0, KEY_M},
/* 17 */    {0, KEY_N},
};

某种原因,通过 uC (AtMega8) “单击”键 (CTRL+ALT) 不起作用。 (我通过同时按下(当(应该)按下来自 uC 的键时)我的“真正”键盘上的 DEL 键来检查这一点 - 然后应该出现“特征”系统管理窗口(Windows 7)。)我有不知道为什么这不起作用。我该怎么做,我的 uC 会按 CTRL+ALT?

【问题讨论】:

    标签: c++ avr hid atmega custom-keyboard


    【解决方案1】:

    示例程序中的报告描述符定义了一个 2 字节的报告来表示一次击键。第一个字节包含 8 位,每个位代表一个键修饰符(左 ctrl、右 alt、左移等),下一个字节是一个索引,表示键的使用(键 A、键 B、键删除等)。

    您需要在第一个字节中对所需的键修饰符进行逻辑或运算。最简单的方法是将它们简单地添加在一起。例如,要发送 Ctrl+Alt+Delete,您可以编写以下代码:

    {MOD_CONTROL_LEFT+MOD_ALT_LEFT, KEY_DELETE}
    

    之后不要忘记发送 {0, 0} 以表明当前没有按键被按下。

    【讨论】:

    • 有效!谢谢你的帮助。在编程过程中我想到一件事。是否可以通过 uC all 的 CTRL+ALT+DEL 顺序单击以在 PC 上显示“蓝色”窗口?我正在尝试编写代码,但没有任何进展......
    • 哦,我写错了。我的意思是 ctrl+alt 正在工作(因为当我在我的真实键盘中按下 del 时会出现蓝色窗口),但是 ctrl+alt+del ({MOD_CONTROL_LEFT+MOD_ALT_LEFT, KEY_DELETE})的所有序列都不起作用(蓝色窗口不会出现)。此外,当代码中只有 del ({0, KEY_DELETE}) 时,del 按钮可以正常工作。仅当代码中类似于 {MOD_CONTROL_LEFT+MOD_ALT_LEFT, KEY_DELETE} 时,它才不像“真正的”ctrl+alt+delete 那样工作。我正在尝试对这些代码进行大量修改,但它不起作用。我能用它做什么?
    • 我怀疑某些 Windows skulduggery,因为当我告诉我自制的 USB 键盘将 ctrl+alt+delete 发送到我的 Ubuntu 20.10 Linux 系统时,它的行为符合预期。您必须记住通过发送 {0,0} 来释放按键 - 否则操作系统会认为您一直在按下这些按键。
    • 所以我尝试了 Win7、Win8、Win10、MS Server 2016 和最新的 Ubuntu,而 uC 的 ctrl+alt+del 在这个操作系统上不起作用。我不知道为什么它不起作用。无论如何,非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2020-09-14
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多