Keyboard XKeysymToKeycode、XTestFakeKeyEvent和映射
我有以下问题:Keyboard XKeysymToKeycode、XTestFakeKeyEvent和映射,keyboard,xorg,Keyboard,Xorg,我有以下问题: 我正在尝试向X服务器发送假密钥事件 为此,我知道两种方法: XSendEvent-我用XK_Z而不是XK_Down尝试了这个 不适用于GTK3 XTestFakeKeyEvent-请参阅下面的我的代码 我的问题是,这些方法都没有考虑键盘映射。我的意思是,当我选择AZERTY映射时,我有一个我期望的“z”字符,当我选择QWERTY映射时,我得到一个“w”,而我心爱的BÉPO映射则得到一个“é” 如何独立于键盘映射获得相同的字符 我正在Unity下使用Ubuntu12.1
- 我正在尝试向X服务器发送假密钥事件
- XSendEvent-我用XK_Z而不是XK_Down尝试了这个
- 不适用于GTK3
- XTestFakeKeyEvent-请参阅下面的我的代码
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
#include <iostream>
// The key code to be sent.
// A full list of available codes can be found in /usr/include/X11/keysymdef.h
/* g++ -o XFakeKey tst.c -L/usr/X11R6/lib -lX11 -lXtst */
char *text = "z";
main()
{
// Obtain the X11 display.
Display *display = XOpenDisplay(0);
if(display == NULL)
return -1;
Window focusWindow;
int revert;
XGetInputFocus(display, &focusWindow, &revert);
KeyCode code = XKeysymToKeycode(display, XStringToKeysym(text));
XTestFakeKeyEvent(display, code, True, CurrentTime);
XTestFakeKeyEvent(display, code, False, CurrentTime);
XCloseDisplay(display);
return 0;
}
#包括
#包括
#包括
#包括
//要发送的密钥代码。
//可用代码的完整列表可在/usr/include/X11/keysymdef.h中找到
/*g++-o XFakeKey tst.c-L/usr/X11R6/lib-lX11-lXtst*/
char*text=“z”;
main()
{
//获取X11显示。
Display*Display=XOpenDisplay(0);
如果(显示==NULL)
返回-1;
窗口焦点窗口;
int还原;
XGetInputFocus(显示、聚焦窗口和还原);
KeyCode code=XKeysymToKeycode(显示,XStringToKeysym(文本));
XTestFakeKeyEvent(显示、代码、真值、当前时间);
XTestFakeKeyEvent(显示、代码、错误、当前时间);
XCloseDisplay(显示);
返回0;
}
使用XChangeKeyboardMapping
API将unicode键符号绑定到未使用的键代码
然后,发送重新映射的键码(使用XTestFakeKeyEvent
或XSendEvent
),使用xkeycodetokesym
的应用程序将获得您想要的符号,与当前键盘/IME无关
未经测试,但似乎按照标准工作