2

私は現在、X11 libを使用して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);
}

どんな助けやアイデアも大いに評価されます

4

1 に答える 1

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

間違ったマクロを使用していました

于 2010-03-06T07:00:07.957 に答える