8 #include <X11/extensions/XTest.h>
10 #define eassert assert
15 static KeyCode keycode(const char *s) {
16 KeySym sym= XStringToKeysym(s);
17 return XKeysymToKeycode(disp,sym);
20 int main(int argc, const char *const *argv) {
22 XWindowAttributes attr;
24 unsigned width,height,bd,depth;
27 id= strtoul(*++argv,&ep,0);
28 disp= XOpenDisplay(0); eassert(disp);
30 r= XRaiseWindow(disp, id); eassert(r);
32 r= XGetWindowAttributes(disp, id, &attr); eassert(r);
33 r= XGetGeometry(disp,id, &attr.root,&xpos,&ypos,&width,&height, &bd,&depth);
37 r= XTranslateCoordinates(disp, id,attr.root, 160,160, &xpos,&ypos,
41 int screen= XScreenNumberOfScreen(attr.screen);
42 XTestFakeMotionEvent(disp,screen, xpos, ypos, 0);
43 XTestFakeButtonEvent(disp,1,1, 0);
44 XTestFakeButtonEvent(disp,1,0, 100);
46 XTestFakeKeyEvent(disp, keycode("Next"),1, 100);
47 XTestFakeKeyEvent(disp, keycode("Next"),0, 100);
53 memset(&ev,0,sizeof(ev));
61 #define KMEVENT(e,t) \
69 e.same_screen= True; \
73 case 'K': KE.keycode= ; KMEVENT(KE,KeyPress);
74 case 'k': KE.keycode= keycode(*++argv); KMEVENT(KE,KeyRelease);
75 case 'M': ME.button=1; KMEVENT(ME,ButtonPress);
76 case 'm': ME.button=1; ME.state=Button1Mask; KMEVENT(ME,ButtonRelease);
83 r= XSync(disp, False); eassert(r);