2015-05-23 14 views
5

Tôi đang cố gắng sử dụng C và Xlib để gửi một sự kiện bấm phím giả vào cửa sổ với sự tập trung, đây là mã của tôi:gửi sự kiện bấm phím giả đến một cửa sổ sử dụng Xlib

#include <X11/Xlib.h> 
#include <X11/keysymdef.h> 
#define XK_A   0x041 

int main() 
{ 
     Display *display = XOpenDisplay(NULL); 
     //find out window with current focus: 
     Window winfocus; 
     int revert; 
     XGetInputFocus(display, &winfocus, &revert); 

     //send key event to taht window 
     KeySym sym; 
     sym=XStringToKeysym("a"); 
     //event definition 
     XKeyEvent event; 
     event.type=KeyPress; 
     event.keycode=XK_A; 
     event.display=display; 
     event.root=winfocus; 
     XSendEvent(display,winfocus,True,KeyPressMask,(XEvent *)&event); 

     return 0; 
} 

Tôi đang cố gắng để giữ mã đơn giản như có thể, tôi muốn gửi thư từ A đến cửa sổ hoạt động tôi nghĩ rằng tôi đang làm điều gì sai dù

nhờ


tôi đã thử các mã sau:

#include <stdio.h> 
#include <X11/Xlib.h> 
#include <X11/Xresource.h> 
#include <X11/Intrinsic.h> 
#include <X11/extensions/XTest.h> 
#include <unistd.h> 


int main() 
{ 
     Display *dis; 
     dis = XOpenDisplay(NULL); 
     KeyCode modcode = 0; //init value 
     modcode = XKeysymToKeycode(dis, XK_B); 
     XTestFakeKeyEvent(dis, modcode, True, 0); 
     XFlush(dis); 
     sleep(1); 
     XTestFakeKeyEvent(dis, modcode, False, 0); 
     XFlush(dis); 
     modcode = XKeysymToKeycode(dis, XK_A); 
     XTestFakeKeyEvent(dis, modcode, True, 0); 
     XFlush(dis); 




     return 0; 
} 

đó nhấn một phím liên tục, tôi không thể để phát hành nút rằng nếu tôi không sử dụng chức năng ngủ, tôi không thể gõ chữ trong một lần và sau đó nhả phím bấm

Trả lời

1

nhận nó, không chắc chắn nếu điều này là cách rightt để làm điều đó nhưng nó được công việc làm: một thông cáo chính trước khi nhấn phím cố định tất cả mọi thứ

#include <stdio.h> 
#include <X11/Xlib.h> 
#include <X11/Intrinsic.h> 
#include <X11/extensions/XTest.h> 


int main() 
{ 
     Display *dis; 
     dis = XOpenDisplay(NULL); 
     KeyCode modcode = 0; //init value 
     int i; 
     char hello[]="hello"; 
     for (i=0;i<5;i++) 
     { 
       modcode = XKeysymToKeycode(dis, XStringToKeysym("a")); 
       XTestFakeKeyEvent(dis, modcode, False, 0); 
       XFlush(dis); 
     //  sleep(1); 
       XTestFakeKeyEvent(dis, modcode, True, 0); 
       XFlush(dis); 
       XTestFakeKeyEvent(dis, modcode, False, 0); 
       XFlush(dis); 
} 



     return 0; 
} 

này sẽ gõ vào 5 ' a's

0

điều này có vẻ giống như một ví dụ (không có câu trả lời) trên Linux Câu hỏi: XLib problem (XSendEvent)

Bên cạnh rõ ràng (không kiểm tra lỗi), có lẽ nhìn vào cách những người khác giải quyết vấn đề sẽ đưa ra một số gợi ý:

Các vấn đề liên quan