Hi all, <br><br>I am trying to generate X events. My main concern is about using that on Linux (Debian), but if I could do it on other platforms, namely Mac, this could be great. <br><br>I tried to generate events using Xlib. I get no error, but my mouse doesn't move, and no key seems typed in my X. I wonder if I have done the right things. Also, it seems like I would have to create very big structs in order to generate some mouse events or such. 
<br><br>Here is a piece of code trying to generate an event. The makefile is included. It is intended to build on Debian GNU/Linux. <br><br>What am I doing wrong ? How can I generate X events in order to control graphical application on Linux ? Is there a protection flag in the kernel at compile time ? Thanks for helping. 
<br><br>-- <br>Alexandre Quessy<br><a href="http://alexandre.quessy.net">http://alexandre.quessy.net</a>
<br><br>======================================================<br>
======================================================<br>
========================= x11test.c =================<br>
<br>/**<br> * Generates X11 mouse and keyboard events<br> * @author <<a href="mailto:alex@sourcelibre.com">alex@sourcelibre.com</a>><br> */<br><br>#include <X11/Xlib.h><br>#include <X11/Xresource.h><br>
#include <X11/keysym.h><br>#include <X11/extensions/XTest.h><br>#include <stdio.h><br><br>int main(int argc, char *argv[]) {<br>    Display *display;<br>    KeySym keysym;<br>    int result;<br>    int i;
<br>    <br>    keysym = XK_q;<br>    <br>    /* should be hostname:number.screen_number */<br>    display = XOpenDisplay(NULL); /* defaults to $DISPLAY */<br>    if (display == NULL) {<br>        printf("Error : could not open display.\n");
<br>        return 1;<br>    }<br>    printf("Display opened successfully.\n");<br>    KeyCode keycode = XKeysymToKeycode(display, keysym);<br>    for (i=0;i<100;i++) {<br>        result = XTestFakeKeyEvent(display, keycode, True, 0);
<br>        //if (result == 0) printf("failed\n"); else printf("success\n");<br>        <br>        usleep(100);<br>        result = XTestFakeKeyEvent(display, keycode, False, 0);    <br>        if (result!=0) printf(".");
<br>        //if (result == 0) printf("failed\n"); else printf("success\n");<br>    }<br>    printf("\n");<br>    return 0;<br>}<br><br clear="all">======================================================
<br>======================================================<br>========================= makefile =================<br><br><br>MACOSX_INCLUDES = -L/Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/lib \<br>    -L/Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/include \
<br>    -L/usr/include/X11<br><br>LINUX_INCLUDES = -L/usr/lib/X11 -I/usr/include/X11 -L/usr/X11R6/lib<br><br>MACOSX_LINKS = -lXtst -lX11 <br>LINUX_LINKS = -lX11 -lXtst<br><br># noms des executables resultants<br><br>FILEZ =  x11test 
<br><br><br>all: $(FILEZ)<br>    echo DONE<br><br>%: %.c<br>    gcc $*.c $(LINUX_INCLUDES) $(LINUX_LINKS) -o $*<br><br><br><br><br>