Mausklick Event senden mit XSendEvent



  • Hallo!
    Ich möchte ein Programm schreiben, bei dem auf Tastendruck ein Mausklick simuliert wird, da ich ziemlich neu bin was Linux-Programmierung angeht hab ich damit einige Probleme und bin auf eure Hilfe angewiesen.

    Ich habe mich etwas über das Xlib-manual schlau gemacht. Hier mein Code bis jetzt:

    //[...] X-Fenster erstellen
    	bool done;
    	XEvent an_event;
    	XEvent leftClickEvent;
    	Window destWindow;
    
    	leftClickEvent.xbutton.send_event = true;
    	leftClickEvent.xbutton.button = 1;
    	leftClickEvent.xbutton.state = 1;
    	leftClickEvent.xbutton.serial = 0;
    	leftClickEvent.xbutton.same_screen = true;
    	leftClickEvent.xbutton.root = leftClickEvent.xbutton.subwindow = 0;
    	leftClickEvent.xbutton.time = 0;
    
    	XSelectInput(display, win, KeyPressMask);
    	while(!done)
    	{
    		XNextEvent(display, &an_event);
    		switch(an_event.type)
    		{
    			case KeyPress:
    			done = true;
    			break;
    		}
    	}
    	sleep(4);
    	XGetInputFocus(display, &destWindow, RevertToNone);
    
    	leftClickEvent.xbutton.window = destWindow;
    	leftClickEvent.xbutton.type = ButtonPress;
    	XSendEvent(display, destWindow, false, ButtonPressMask, &leftClickEvent);
    	sleep(1);
    	leftClickEvent.xbutton.type = ButtonRelease;
    	XSendEvent(display, destWindow, false, ButtonReleaseMask, &leftClickEvent);
    	XCloseDisplay(display);
    	return 0;
    }
    

    Während des sleeps hole ich ein anderes Fenster in den Vordergrund und warte... der "Klick" wird aber nicht ausgeführt.
    Was habe ich falsch gemacht?
    Auch wenn es ein ganz dummer Fehler ist, bitte sagt es mir, das ist wie gesagt mein erster Versuch mit X11 zu programmieren.



  • Das Programm soll dann zB in Firefox einen Link auslösen, warum ist das mit meinem Code nicht möglich?



  • ist gelöst, statt XSendEvent benutze ich jetzt XTestFakeButtonEvent,
    ich nehme an dass Firefox aus Sicherheitsgründen keine Events von XSendEvent annimmt.


Log in to reply