Mausposition auslesen
Hallo Experts,
vielleicht kann mich ein Pascal-Kundiger in die richtige Richtung schupsen. Habe wie ein Besengter gegoogelt, aber bewege mich da ständig im Kreis.
Ich benutze den FreePascal-Compiler 2.6.4 mit einer Lazarus-IDE.
Ich brauche die aktuelle Mausposition, und zwar die Bildschirmkoordinaten, nicht die Formularkoordinaten. Ich habe das mit
im Mousemove-Handler probiert, aber dat lüppt nich. Ich bekomme zwar die Koordinaten, aber nur solange sich die Maus innerhalb des Formularfensters bewegt - ist auch klar, da ja der Mousemove-Handler des Formulars genötigt wird.
Frage also: Wie komme ich an die aktuelle Mausposition (in Bildschirm-Koordinaten), auch wenn das Anwendungsfenster minimiert ist? Hat jemand da draußen an den Bildschirmen einen Tipp für mich?
Vor vielen Jahren konnte man den Interrupt-Handler abfragen (Interrupt 33, wenn ich mich recht entsinne). Geht das mit modernen Betriebssystemen auch noch? Und ggf. wie?
Boah man, ist das lange her ...
Gruß
ankh
vielleicht kann mich ein Pascal-Kundiger in die richtige Richtung schupsen. Habe wie ein Besengter gegoogelt, aber bewege mich da ständig im Kreis.
Ich benutze den FreePascal-Compiler 2.6.4 mit einer Lazarus-IDE.
Ich brauche die aktuelle Mausposition, und zwar die Bildschirmkoordinaten, nicht die Formularkoordinaten. Ich habe das mit
Mouse.CursorPos.X / Mouse.CursorPos.Y
Frage also: Wie komme ich an die aktuelle Mausposition (in Bildschirm-Koordinaten), auch wenn das Anwendungsfenster minimiert ist? Hat jemand da draußen an den Bildschirmen einen Tipp für mich?
Vor vielen Jahren konnte man den Interrupt-Handler abfragen (Interrupt 33, wenn ich mich recht entsinne). Geht das mit modernen Betriebssystemen auch noch? Und ggf. wie?
Boah man, ist das lange her ...
Gruß
ankh
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 249991
Url: https://administrator.de/contentid/249991
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
11 Kommentare
Neuester Kommentar
Moin,
vlt. hilft dir folgendes:
Als ich das vor einiger Zeit brauchte, habe ich das HIER gefunden.
Einfach das Script mit dem Editor von AutoIT speichern und dann mit RunScript von AutoIT ausführen. Koordinaten werden dann in der linken Ecke oben angezeigt und können mit STRG+S zusätzlich in eine txt-Datei gespeichert werden.
Grüße, narthan
vlt. hilft dir folgendes:
Als ich das vor einiger Zeit brauchte, habe ich das HIER gefunden.
Einfach das Script mit dem Editor von AutoIT speichern und dann mit RunScript von AutoIT ausführen. Koordinaten werden dann in der linken Ecke oben angezeigt und können mit STRG+S zusätzlich in eine txt-Datei gespeichert werden.
MsgBox(0, "Tastaturkürzel", "Mit STRG+S werden die Koordinaten in der Textdatei gespeichert." & @CRLF & "Mit STRG+D wird der Inhalt der Textdatei gelöscht"&@crlf&"Mit STRG+F werden Koordinaten und Pixelfarbe in HEX gespeichert")
While 1 ;eigentliche schleife die die Koordinaten abliest und anzeigt
HotKeySet("{esc}", "ende")
HotKeySet("^s", "save")
HotKeySet("^f", "savewithcoords")
HotKeySet("^d", "delete")
$file = FileOpen("coords.txt", 1)
$pos = MouseGetPos()
$px = PixelGetColor($pos ,$pos[1])
ToolTip($pos&", "&$pos[1]&@CRLF&"Pixelfarbe: "&Hex($px, 6), 0, 0)
Sleep(20)
WEnd
Func save() ;speichert die Koordinaten
If $file = -1 Then Exit MsgBox(0, 'Maus-Koordinaten', 'Datei konnte nicht geöffnet werden!') ;überprüft ob die Datei schon vorhanden ist
FileWrite($file, $pos & ", " & $pos[1] & @CRLF)
FileClose($file)
EndFunc ;==>save
Func savewithcoords() ;speichert die Koordinaten
$file = FileOpen("coords.txt", 1)
If $file = -1 Then Exit MsgBox(0, 'Maus-Koordinaten', 'Datei konnte nicht geöffnet werden!') ;überprüft ob die Datei schon vorhanden ist
FileWrite($file, $pos & ", " & $pos[1] &" "& Hex($px, 6) & @CRLF)
FileClose($file)
EndFunc ;==>save
Func delete() ;löscht den Inhalt der Textdatei
$file = FileOpen("coords.txt", 2)
FileClose($file)
EndFunc ;==>delete
Func ende() ; logischerweise: Ende xD
Exit
EndFunc ;==>ende
Grüße, narthan
Moin Ankh,
kenne Pascal überhaupt nicht, aber laut Doku sollte sich die Mausposition in Screenkoordinaten mit GetMouseX / GetMouseY abfragen lassen.
Grüße Uwe
kenne Pascal überhaupt nicht, aber laut Doku sollte sich die Mausposition in Screenkoordinaten mit GetMouseX / GetMouseY abfragen lassen.
Grüße Uwe
Und was ist wenn du einfach die Windows API Funktion GetCursorPos über die user32.dll einbindest und aufrufst ?
ungefähr so einzubinden:
ungefähr so einzubinden:
function GetCursorPos(var lpPoint: TPoint):Boolean;stdcall;external 'user32.dll';
Zitat von @AnkhMorpork:
EDIT:
Tja, das führt leider in dieselbe Sackgasse. Das Mousemove-Ereignis wird nur solange erkannt, wie sich der Zeiger innerhalb
des Anwendungsfensters befindet.
Das ist ja auch klar, da es nur die Anwendung erfasst.EDIT:
Tja, das führt leider in dieselbe Sackgasse. Das Mousemove-Ereignis wird nur solange erkannt, wie sich der Zeiger innerhalb
des Anwendungsfensters befindet.
Das soll aber letztendlich minimiert werden.
Mach die Abfrage über das API und einer While Schleife, feddich...
Hallo Ankh,
ist zwar uralt, der Thread, aber der Vollständigkeit halber: Besser macht man sowas mit einem Mouse Hook. Dann kriegt man wirklich alle Mausbewegungen mit und flutet auch die Message Queue nicht mit Timer Events.
Grüße
Friemler
ist zwar uralt, der Thread, aber der Vollständigkeit halber: Besser macht man sowas mit einem Mouse Hook. Dann kriegt man wirklich alle Mausbewegungen mit und flutet auch die Message Queue nicht mit Timer Events.
Grüße
Friemler