我嘗試發送鍵與XLIB和XTestFakeKeyEvent的應用程序,它做工精細,用下面的代碼:XLIB,XTestFakeKeyEvent latences
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);
}
如果選擇列表[selectWindow]是我發送數據的窗口,並篡改一個char [2](將char從hello [i]轉換爲char *作爲函數 此代碼將hello wariable的內容寫入選定窗口,但是,我試圖發送Return鍵,
XSetInputFocus(disp, list[selectWindow],RevertToPointerRoot,CurrentTime);
XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, XK_Return),True, CurrentTime);
XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, XK_Return),False, CurrentTime);
所以我再次選擇窗口,併發送X K_Return是應用程序的關鍵,但它不起作用,我認爲這是因爲Xlib存在'延遲',因爲如果我在'for'循環結尾處等待(2),它可以正常工作,但每次發送消息時,我都不想在2秒內等待。
我不知道我該怎麼做才能解決這個問題。
謝謝。
我有這個完全相同的問題。我找到了兩種解決方法。首先,發送後等待。我發現我可以等待不到2秒鐘。使用它只需十分之一秒的等待。其次,如果我發送兩份(或更多)退貨,除第一份正常工作外(沒有「睡眠」)。 – MPT 2012-03-30 15:22:01
@MPT,你甚至可以使用'nanosleep()' – 2015-01-23 13:29:55