Maus global nutzen
-
Heyho Leute,
ich wage es einmal einen Beitrag zu schreiben in der Hoffnung, dass es so einen noch nicht gibt. *gesucht hab*
Ich möchte unter Linux die Maus simulieren. Also wenn ich z.B. die Tastaturtaste "Rechts" drücke, soll der Mauszeiger nach Rechts wandern. Das funktioniert soweit auch, dazu nutze ich zZ. QT.
Das Problem liegt im Klicken. Klicken funktioniert nur, sobald er sich über ein QT-Fenster befindet(ansonsten bekomme ich das Event des klickens nicht in die Finger, bzw. müsste es irgendwie weiterleiten usw.)... ich möchte die Maus aber ja nicht nur auf diese Anwendung beschränken sondern auch den Desktop bedienen können.Unter Windows konnte ich, unter Einbindung der windows.h, sehr leicht Events abschicken:
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0, NULL,NULL)
bzw.
mouse_event(MOUSEEVENTF_RIGHTUP,0,0, NULL,NULL)
Das war ziemlich einfach. Gibts etwas vergleichbares unter Linux?
Vielen Dank im Voraus!
stolen87
-
Ich habe erst vor kurzem ein Programm geschrieben das soetwas ähnliches macht.
#include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/keysym.h> #include <X11/extensions/XTest.h> #include <unistd.h> #include <iostream> using namespace std; int main() { Display *display = XOpenDisplay(NULL); if(display == NULL) return 1; XTestFakeButtonEvent(display, 1, true, 50); XTestFakeButtonEvent(display, 1, false, 50); XCloseDisplay( display ); return 0; }
Ich hab den Quellcode gerade etwas gekürzt (das für dich unwichtige gelöscht ->
darum keine Garantie auf funktionsfähigkeit. Funktionsnamen sollten allerdings
noch stimmen)
Vll. hilft dir der Codeschnipsel ja etwas.
-
Vielen Dank für die Antwort...
Ich habe das jetzt mal ausprobiert und bin dabei leider auf einen Linker-Fehler gestoßen. Er findet die Funktion "XTestFakeButtonEvent()" nicht. Da er die Header-Datei ("XTest.h") findet, gehe ich davon aus, dass er eine Lib oder eine DLL benötigt.
Kannst du mir sagen um welche es sich dabei handelt bzw. wo ich diese finde? Die Lib müsste ich dann ja im project-file von QT mit einbinden, oder?Vielen dank.
Stolen87
-
Der Beispielcode lässt sich mit
"g++ bla.cpp -o bla -lXtst"
übersetzten.
Die Bibliothek befindet sich hier:
/usr/lib/libXtst*
-
Besten dank... Hat einwandfrei funktioniert. Ich kann jetzt sowohl unter Windows als auch unter Linux aus meinem Programm heraus die Maus bewegen und klicken wo immer ich möchte. Perfekt! Also nochmal vielen Dank.
Gruß Stolen87
-
wie kann man den ohne qt die maus bewegen?
-
Goodjee schrieb:
wie kann man den ohne qt die maus bewegen?
hä? Siehe oben. Da wird kein QT benutzt...
-
Mit "XTestFakeMotion" kannst du analog zum obigen Beispiel
den Mauszeiger bewegen.
-
hab das auch mal versucht, war aber nicht erfolgreich. dabei gab der compiler folgende fehlermeldung aus:
/usr/bin/ld: cannot find -lXtst
collect2: ld returned 1 exit statusda ich nicht weiss, durch welches packet ich auch das XTest.h file bekomme, hab ich einfach mal die folgenden packete installiert:
libxcb-xtest0-dev,libxcb-xtest0, libxext6, libxext-devfehlt mir dennoch ein packet oder irgendwo irgendein eintrag? muss ich die compiler-parameter ändern? was mache ich falsch?
hoffe, es stolpet in nächster zeit wieder jemand, der mir weiterhilft über diesen eintrag.
danke markus
PS: ich arbeite mit Ubuntu feisty