c++ - 死键问题(急性、分音符等)c++

标签 c++ x11 xlib

我目前正在使用 X11 库为 Linux 编写自己的虚拟键盘,但我找不到模拟任何死键的 KeyPress 事件的方法。 例如,我尝试使用指定的宏(XK_aacute)编写“á”,但没有任何反应。 后来我尝试发送 XK_acute (急性重音宏),然后发送 XK_a,然后再次没有任何反应:(

在KDE虚拟键盘“Kvkbd”中可以做到这一点,所以我下载了源代码,但它只支持英文键盘布局

这是我的测试代码:

#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
#include <iostream>

int main(){
 Display *display;
 unsigned int keycode;
 unsigned int keycode1;
 display = XOpenDisplay(NULL);

 keycode = XKeysymToKeycode(display, XK_aacute); 
 XTestFakeKeyEvent(display, keycode, True, 0);
 XTestFakeKeyEvent(display, keycode, False, 0);

 keycode1 = XKeysymToKeycode(display, XK_acute);
 XTestFakeKeyEvent(display, keycode1, True, 0);


 keycode = XKeysymToKeycode(display, XK_a);
 XTestFakeKeyEvent(display, keycode, True, 0);
 XTestFakeKeyEvent(display, keycode, False, 0);

 XTestFakeKeyEvent(display, keycode1, False, 0);


 keycode = XKeysymToKeycode(display, XK_D);
 XTestFakeKeyEvent(display, keycode, True, 0);
 XTestFakeKeyEvent(display, keycode, False, 0);
 XFlush(display);
}

任何帮助或想法将不胜感激

最佳答案

我刚刚想通了 ??

#include <X11/extensions/XTest.h>
#include <X11/keysym.h>
#include <X11/Xlib.h>
#include <iostream>

int main(){
 Display *display;
 unsigned int keycode;
 unsigned int keycode1;
 display = XOpenDisplay(NULL);

 keycode1 = XKeysymToKeycode(display, XK_dead_acute);
 XTestFakeKeyEvent(display, keycode1, true, 0);


 keycode = XKeysymToKeycode(display, XK_A);
 XTestFakeKeyEvent(display, keycode, true, 0);
 XTestFakeKeyEvent(display, keycode, false, 0);

 XTestFakeKeyEvent(display, keycode1, false, 0);

 XFlush(display);
}

我使用了错误的宏

关于c++ - 死键问题(急性、分音符等)c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2391476/

相关文章:

c++ - 为什么不是条件 *First1 == * First2 ?? (C++ STL包含函数实现)

c++ - Xorg 选择夹板

x11 - X11/Xlib 的全局热键

XLib 的 Java 绑定(bind)

c++ - 关于库和框架的问题

c++ - 如何从两个字节组装一个 float ?

c++ - 按列更新文件

vim - 如何使用X11转发从vim复制到本地计算机

c++ - X损坏 : get event on window content changes

python - 使用 python 和 xlib 编写合成窗口管理器