7 #include <X11/extensions/XTest.h>
8 #include <X11/keysym.h>
14 static KeyCode keycode(KeySym sym) {
15 return XKeysymToKeycode(disp,sym);
18 static CanonImage *screenshot_now(Window id) {
23 r= asprintf(&cmd, "xwd -silent -id 0x%lx | xwdtopnm", (unsigned long)id);
25 FILE *f= popen(cmd,"r"); eassert(f);
26 ci= file_read_image(f);
27 r= fgetc(f); eassert(r==EOF); eassert(feof(f));
28 r= pclose(f); eassert(r>=0); eassert(WIFEXITED(r) && !WEXITSTATUS(r));
33 static void read_pages(Window id) {
35 XWindowAttributes attr;
36 int xpos,ypos, evbase,errbase,majver,minver;
37 unsigned width,height,bd,depth;
40 disp= XOpenDisplay(0); eassert(disp);
42 r= XTestQueryExtension(disp, &evbase,&errbase,&majver,&minver);
45 r= XRaiseWindow(disp, id); eassert(r);
47 r= XGetWindowAttributes(disp, id, &attr); eassert(r);
48 r= XGetGeometry(disp,id, &attr.root,&xpos,&ypos,&width,&height, &bd,&depth);
51 r= XTranslateCoordinates(disp, id,attr.root, 160,160, &xpos,&ypos,
55 int screen= XScreenNumberOfScreen(attr.screen);
56 XTestFakeMotionEvent(disp,screen, xpos, ypos, 0);
58 XTestFakeButtonEvent(disp,1,1, 0);
59 XTestFakeButtonEvent(disp,1,0, 50);
61 XTestFakeKeyEvent(disp, keycode(XK_Next),1, 50);
62 XTestFakeKeyEvent(disp, keycode(XK_Next),0, 50);
64 r= XSync(disp, False); eassert(r);
67 int main(int argc, char **argv) {
71 id= strtoul(*++argv,0,0);
73 ci= screenshot_now(id);