Hi,
Ich versuche ein Programm zu schreiben, das mir eine bestimmte Stelle in einem bestimmten X-Fenster automatisch anklickt. Allerdings scheine ich da irgendwas falsch zu machen, denn das Programm läuft zwar klaglos durch, aber der Klick wird nicht ausgeführt. (Ja ich rechne auch die Hex-Fensternummer vom xwininfo in dezimal um)
C
#include <stdlib.h>
#include <iostream>
#include <X11/Xlib.h>
using namespace std;
int main (int argc, char* argv[]) {
Display* d;
d=XOpenDisplay(0);
if (argc!=2) {
cout << "Please specify a window number" << endl;
exit (-1);
}
int wn=atoi(argv[1]);
cout << "Window number is "<< wn << endl;
if (d) {
cout << "Display opened sucessfully" << endl;
} else {
cout << "Cannot open $DISPLAY" << endl;
exit(-1);
}
XButtonEvent e;
e.type=ButtonPress;
e.button=1;
e.state=1;
e.window=wn;
e.serial=0;
e.send_event=true;
e.same_screen=true;
e.root=XDefaultRootWindow(d);
e.subwindow=0; //?!
e.time=0;
e.x_root=720; // Koordinaten vom Bildschirm nehm ich an, mit xev ausgemessen
e.y_root=845;
e.x=269; // Koordinaten vom Zielfenster? auch mit xev gemessen
e.y=466; // stimmt nicht 100% genau mit [xy]_root zusammen, aber ich denk mal das ist egal
cout << "XSendEvent says "<< XSendEvent(d, wn, true /* ? */, 0, (XEvent*)&e) << endl;
usleep(100000);
e.type=ButtonRelease;
XSendEvent(d, wn, true /* ? */, 0, (XEvent*)&e);
XCloseDisplay(d);
return 0;
}
Alles anzeigen
Vielleicht gibt's ja hier jemanden im Forum, der mit sowas schon Erfahrung hat und mir da ein bisschen weiterhelfen könnte. Vielen Dank!