Bildschirmlupe mit Windowshook und eigener Window Message

  • Auch wenn ich mit diesem Script nicht ganz zufrieden bin, stelle ich es hier mal der Allgemeinheit zur Verfügung. Vielleicht kann es ja mal jemand gebrauchen.
    Zumindest ist es ein Beispiel für die Umsetzung eines Windows Hooks auf die Computermaus, um die Mauszeigerbewegung abzufangen.

    Bei Hooks wird immer eine Callback Funktion angegeben, die von einem externen Prozess aus aufgerufen wird wenn ein bestimmtes Event eintritt. Von dieser Funktion hängt aber auch jede weitere Verwendung dieser Daten ab.
    Ein großes Problem bei globalen Hooks ist die begrenzte Dauer der Callback Funktion. Wenn die Funktion zu lange dauert (z.B. +100ms) dann wird der vom Hook beanspruchte Teil des Systems(z.B. Mausposition) für alles andere verlangsamt (z.B. Cursorposition von Windows aktualisieren).
    Ich habe deswegen das Auslesen der Mausdaten und alles andere Hook-Zeugs in ein zweites Script ausgelagert. Dieses zweite Script schickt nun bei jeder Bewegung des Mauszeigers dessen aktuelle Position mit einer Window Message (wie z.B. WM_MOVE) an das erste Script, das daraufhin die Bildschirmlupe aktualisiert. Im ersten Script muss man dann lediglich mit GUIRegisterMsg die MessageID registrieren.

    Das zweite Script ("TimerSlave.au3") muss zuerst gestartet werden und startet daraufhin das erste Script (sofern es den richtigen Namen trägt und im selben Verzeichnis ist).
    Dieses Programm dürfte für jeden Interessant sein, der sich für Windows Hooks und interprozess Kommunikation interessiert. Außerdem ist es ein simples Beispiel, wie sich bestimmte zeitintensive Aufgaben bzw. Verwaltungsaufgaben auf andere Scripte auslagern und synchronisieren lassen. Schließlich reagiert das eine Script sofort, wenn das andere die Nachricht sendet. Und über wParam und lParam können Daten übertragen werden.