生成组合的虚拟按键以获得 â、ó、ć 等字符
Generate combined virtual key presses to get chars like â, ó, ć, and more complex
我正在使用QML实现虚拟键盘。
到目前为止,我从字面上映射了要打印的不同关键映射的字符(无移位、带移位、使用 Alt Gr 等(。
所以我必须在代码中的某处写下不同布局的所有字符。
特别是对于布局和语言,其中两个或多个按键会生成更复杂的字符,例如按'后跟a得到 à 变得非常讨厌。
所以我认为这是一种次优的方法,并且有一个更聪明的解决方案来提供扫描代码(如 Linux 中的"showkey -s"提供(并使用系统区域设置来打印正确的字符,比如说 QQuick LineEdit。
将扫描代码传递给系统以生成"真实"关键事件的最佳/正确方法是什么,以及如何在我的代码中"接收"它们。
系统是Linux。C++后端会很好。猜测仅靠QML将无法... 为此生成自己的键盘输入设备可能很聪明吗?
或者我可以将扫描代码注入现有的键盘设备以模拟压力机吗?
以下代码派生自
如何在 C 中使用 libevdev 生成键盘输入
使用libevdev
似乎指向正确的方向。
它允许将扫描代码发送到新创建的键盘设备(需要root(。
#include <stdio.h>
#include <libevdev/libevdev.h>
#include <libevdev/libevdev-uinput.h>
#include <unistd.h>
int main()
{
int err;
struct libevdev *dev;
struct libevdev_uinput *uidev;
dev = libevdev_new();
libevdev_set_name(dev, "fake keyboard device");
libevdev_enable_event_type(dev, EV_KEY);
for(uint key = 1; key < 255; ++key) {
libevdev_enable_event_code(dev, EV_KEY, key, nullptr);
}
err = libevdev_uinput_create_from_device(dev,
LIBEVDEV_UINPUT_OPEN_MANAGED,
&uidev);
if (err != 0) {
return err;
}
sleep(1);
libevdev_uinput_write_event(uidev, EV_KEY, KEY_LEFTSHIFT, 1);
libevdev_uinput_write_event(uidev, EV_KEY, KEY_A, 1);
//libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
libevdev_uinput_write_event(uidev, EV_KEY, KEY_A, 0);
//libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
libevdev_uinput_write_event(uidev, EV_KEY, KEY_B, 1);
//libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
libevdev_uinput_write_event(uidev, EV_KEY, KEY_B, 0);
//libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
libevdev_uinput_write_event(uidev, EV_KEY, KEY_LEFTSHIFT, 0);
libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
sleep(1);
libevdev_uinput_destroy(uidev);
printf("nCompleten");
}
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 检查向量是否具有所有可能的字符组合
- 如何通过组合多个字符数组来创建字符数组?
- 如何组合一个宽字符字符串,中间插入一些空字符
- 生成组合的虚拟按键以获得 â、ó、ć 等字符
- 找不到如何创建使用指针、字符和 for 函数组合的程序
- 通过字符串迭代并将每个循环中的先前字符组合在一起
- 将字符串转换为带有Isringstream的字符和INT(组合)
- 如何组合字符向量的二进制第 n 位
- 查找有关当前键盘布局的字符的可能键组合
- 如何通过将特定的字符组合移动到空数组来"delete"单词和元音?
- 如何在输出到文本文件时防止C++中的字符组合
- 组合位 - 将字符组合为整数C++
- 函数从c++中的字符串中选择字符组合
- 如何组合多个字符以制作字符串?
- 组合 std::string 和 C 字符串会导致缓冲区溢出
- 如何在c++中将几个bacis字符组合成一个字符串
- 将文件中的两个十六进制字符组合并转换为十进制
- 如何找到所有不同的组合作为一个字符串的字符的不同长度的单位