so ich hab jetzt nen beispiel gefunden. funktioniert wunderbar
gruss pulp
/*
* compile & link: gcc -pipe -O2 -o xsendevent{,.c} -L /usr/X11R6/lib -lX11
* run: ./xsendevent "$WINDOWID" 1 2 3 4 Left
* # sends keys 1, 2, 3, 4 and Left to window $WINDOWID
*/
http://bsd.opennet.ru/base/dev/sendevent.txt.html
PHP-Code:
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <string.h>
int main(int argc, char *argv[])
{
Display *dpy;
Window window;
char *prog;
char *s;
int i;
if ((prog=strrchr(argv[0],'/'))==NULL)
prog=argv[0];
else
prog++;
if (argc < 2) {
printf("Usage: %s windowid\n", prog);
return 1;
}
dpy = XOpenDisplay(NULL);
if (dpy == NULL) {
fprintf(stderr,"%s: Cannot open display\n",prog);
return 1;
}
window = (Window)strtol(argv[1], &s, 0);
if(*s) {
fprintf(stderr, "%s: bad windowid: `%s'\n%*c\n",
prog,argv[1],strlen(prog)+17+1+(s-argv[1]),'^');
XCloseDisplay(dpy);
return 1;
}
for(i = 2; i < argc; i++) {
XEvent ev;
KeySym key;
ev.xkey.type = KeyPress;
ev.xkey.window = window;
ev.xkey.root = ev.xkey.subwindow = None;
ev.xkey.time = 0;
ev.xkey.x = ev.xkey.y = ev.xkey.x_root = ev.xkey.y_root = 0;
ev.xkey.state = 0;
key = XStringToKeysym(argv[i]);
ev.xkey.keycode = XKeysymToKeycode(dpy,key);
ev.xkey.same_screen = True;
XSendEvent(dpy, window, True, KeyPressMask, &ev);
ev.type = KeyRelease;
XSendEvent(dpy, window, True, KeyReleaseMask, &ev);
}
XCloseDisplay(dpy);
return 0;
}
Lesezeichen