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 setzenSo 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 endpDas 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*