我尝试将 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/