2010-03-06 35 views
2

我目前正在写我自己的虚拟键盘为Linux使用X11库,我只是无法找到方法来模拟KeyPress事件的任何死钥匙。 例如,我曾尝试使用asign宏编写“á”,它是XK_aacute,没有任何反应。 后来我试图发送XK_acute(急性口音宏),然后XK_a,并再次,没有任何反应:(死钥匙(急性,diaeresis等)问题c + +

在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); 
} 

任何帮助或想法将大大apreciated

回答

2

我只是想出了¬¬

#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); 
} 

我使用了错误的宏

+1

这帮助我用我自己的应用程序谢谢! – eqzx 2011-06-23 22:38:22