我尝试将 key 发送到具有XLib和XTestFakeKeyEvent的应用程序,并且使用以下代码可以正常工作:

XSetInputFocus(disp, list[selectWindow],RevertToPointerRoot,CurrentTime);
for(i=0;i<hello.size();i++){
    tamper[0] = hello[i];
    KeySym key = XStringToKeysym(tamper);
    XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, key),True, CurrentTime );
    XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, key),False, CurrentTime );
}

其中Select list [selectWindow]是我发送数据的窗口,并篡改了char [2](将char从hello [i]转换为char *用于该函数)。
这段代码将wariable的内容写入所选窗口,但是,我尝试发送Return键,
XSetInputFocus(disp, list[selectWindow],RevertToPointerRoot,CurrentTime);
XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, XK_Return),True, CurrentTime );
XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, XK_Return),False, CurrentTime );

因此,我再次选择窗口,并将XK_Return键发送到应用程序,但是它不起作用,我认为这是由于Xlib的“滞后”,因为如果我在代码末尾放置了一个wait(2), “for”循环工作正常,但我不想每次发送消息时都等待2秒。

我不知道该如何解决。

谢谢你。

最佳答案

调用XTestFakeKeyEvent之后是XFlush(disp)还是XSync(disp,false)?

关于c++ - XLib,XTestFakeKeyEvent延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9410776/

10-13 07:09