1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

XSendEvent zum Simulieren von Mausklicks

    • Frage
  • escitalopram
  • 19. April 2006 um 00:33
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • escitalopram
    Punkte
    105
    Beiträge
    16
    • 19. April 2006 um 00:33
    • #1

    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!

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum