windows sysmtemweite mouse hooks probleme



  • Ich möchte folgendes Erreichen:
    mausbewegungen abfangen, überprüfen ob der cursorüber eine bestimmte x-coordinate hinweg bewegt wurde.
    Falls dies der fall ist, soll der cursor auf genau diese coordinate gesetzt werden und die Nachricht nicht weiter verarbeitet werden.

    Das habe ich erreicht:
    der hook läst sich installieren und funktioniert auch wie geplant
    (über postmessage bestimmter daten, an das Kontrollprogram überprüft)
    was nicht funktioniert ist das cursor setzen

    So sieht meine auf das notwendigste reduzierte Funktion aus

    MouseProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD
      LOCAL changedFlag:BYTE  ; lokale byte variable
      mov changedFlag, 0      ; initialisieren auf 0
    
      mov edx,lParam          ; parameter in register lade
      assume edx:PTR MOUSEHOOKSTRUCT  ; als pointer auf MOUSEHOOKSTRUCT  behandeln
    
      mov ecx, 400                    ; constante 400 laden
      .if([edx].pt.x > ecx)           ; falls aktuelle cursorpos > 400
          invoke SetCursorPos, 399, [edx].pt.y  ; API-Call SetCursorPos(399, curPos.y)
           mov changedFlag, 1         ; setze lokale variable != 0
      .endif
    
      .if (changedFlag==0)               ; wenn position <= 400 war, dann
        ;call next hook procedure
        invoke CallNextHookEx,hHook,nCode,wParam,lParam   ; nächsten hook aufrufen
      .endif
      ret
    MouseProc endp
    

    Das problem ist, dass der code nicht tut, was er soll.
    Der Cursor wird hängt immer an der stelle 399,0, egal was passiert.

    Vielleicht kann mir ja von euch jemand helfen.

    Ps:
    für alle die sich wundern wofür man sowas brauchen könnte:

    Ich wollte für den 2 monitor betrieb die grenze zwischen beiden screens "klebrig" machen, so dass man erst mal hängen bleibt und erst bei dem nächsten anlauf drüber kann.



  • das problem ist, dass du den cursr jedes mal wenn er über 400 ist, zurücksetzt d.h er kann ga rnicht weiter weil er im nächsten durchlauf wieder zurückgesetzt wird



  • das rücksetzen der x-coordinate ist ja beabsichtigt.
    Nur wurde der Cursor IMMER aud 399,0 gesetzt.

    Hab das Problem aber gefunden.
    Ich hatte nach dem assume noch ein paar befehle drin, die icher der Übersciht halber aber weggelassen habe.
    Das eine war ein api-call.

    edx gehört zu den registern die in einem call geglobbert werde dürfen und ich habs natürlcih nicht gesichert, so das da bogus drinstand und er immer in das if-then ging
    *Kopf gegen die Wand schlag*


Anmelden zum Antworten