Es gibt doch eine Möglichkeit, die Maus in einem Fenster oder Screen einzufangen. Nicht möchte ich genau das Gegenteil: die Maus von einem Bildschirmbereich aussperren.
Ich habe zwei Desktops und will verhindern, dass die Maus vom ersten auf den zweiten verschoben werden kann. Einfach Abschalten ist nicht, weil die Maus dann trotzdem weiterwandert, sie soll aber am rechten Rand des ersten Desktops hängenbleiben, als wäre der zweite nicht da.
Sven
Maus aussperren
Vielleicht hilft dir das hier ja weiter?
Das Programm lässt sich beenden, indem du die Maus ganz nach oben links fährst. Du müsstest halt das ganze so abändern, damit die Maus nicht die Grenzen des ersten Desktops verlassen kann. Geht ja Recht einfach mit ExamineDesktops() und dann den entsprechenden Funktionen.
Gruß,
Cadogan
Code: Alles auswählen
Structure ApiPoint
x.l
y.l
EndStructure
Global Maus.ApiPoint
Repeat
Delay(1)
GetCursorPos_(@Maus)
Debug Maus\x
Debug Maus\y
x.l= Maus\x
y.l= Maus\y
If Maus\x > 400
mouse_event_(#MOUSEEVENTF_MOVE,-10,0,0,0)
EndIf
If Maus\y > 300
mouse_event_(#MOUSEEVENTF_MOVE,0,-10,0,0)
EndIf
If Maus\x =0 And Maus\y=0
End
EndIf
ForEver

Gruß,
Cadogan
Versuch es mal besser hiermit:
Das brauchst Du nur ein mal aufrufen, dann verlässt die Maus den Bereich nicht mehr (kann dann also auch nicht mehr auf den anderen Desktop).
Code: Alles auswählen
Procedure MouseRestrict(left.l, top.l, width.l, height.l)
Protected rect.RECT
rect\left = left
rect\top = top
rect\right = width
rect\bottom = height
ClipCursor_(rect)
EndProcedure
@ Hades
Ja, so funktioniert es! Ich hab es erst mit
versucht, ging natürlich nicht.
Was passiert eigentlich, wenn ein anderes Programm auch glaubt, die Maus einfangen zu müssen? Dann gilt das zuletzt aufgerufene ClipCursor_(), nehme ich an?
Sven
Ja, so funktioniert es! Ich hab es erst mit
Code: Alles auswählen
ClipCursor_(*rect)
Was passiert eigentlich, wenn ein anderes Programm auch glaubt, die Maus einfangen zu müssen? Dann gilt das zuletzt aufgerufene ClipCursor_(), nehme ich an?
Sven
Was spielst Du denn da? 'Catch The Mouse' ?
Ich hab noch nicht ausprobiert was passiert wenn ein zweites Programm ClipCursor aufruft, aber ich gehe doch stark davon aus, dass der letzte ClipCursor Aufruf Vorrang hat. Wüsste nicht was sonst passieren sollte.
Das da oben hab ich nur eben schnell für Dich hingecoded und dabei ist mir mal wieder ein blöder Fehler passiert. Es muss natürlich right/bottom und nicht width/height heissen. Is mir echt peinlich.
Hier nochmal richtig:

Ich hab noch nicht ausprobiert was passiert wenn ein zweites Programm ClipCursor aufruft, aber ich gehe doch stark davon aus, dass der letzte ClipCursor Aufruf Vorrang hat. Wüsste nicht was sonst passieren sollte.
Das da oben hab ich nur eben schnell für Dich hingecoded und dabei ist mir mal wieder ein blöder Fehler passiert. Es muss natürlich right/bottom und nicht width/height heissen. Is mir echt peinlich.

Hier nochmal richtig:
Code: Alles auswählen
Procedure MouseRestrict(left.l, top.l, right.l, bottom.l)
Protected rect.RECT
rect\left = left
rect\top = top
rect\right = right
rect\bottom = bottom
ClipCursor_(rect)
EndProcedure
>>Was spielst Du denn da? 'Catch The Mouse' ?
Nanee, sperr die Maus aus. Nämlich vom zweiten Desktop, auf dem sie stören würde. Und da hätte ich gern, dass das während der Programmlaufzeit so bleibt und mir da kein anderes Program zwischenfunkt.
>>Das da oben hab ich nur eben schnell für Dich hingecoded und dabei ist mir mal wieder ein blöder Fehler passiert. Es muss natürlich right/bottom und nicht width/height heissen. Is mir echt peinlich.
Macht nix, soviel Umdenken ist gerade noch drin.
Sven
Nanee, sperr die Maus aus. Nämlich vom zweiten Desktop, auf dem sie stören würde. Und da hätte ich gern, dass das während der Programmlaufzeit so bleibt und mir da kein anderes Program zwischenfunkt.
>>Das da oben hab ich nur eben schnell für Dich hingecoded und dabei ist mir mal wieder ein blöder Fehler passiert. Es muss natürlich right/bottom und nicht width/height heissen. Is mir echt peinlich.
Macht nix, soviel Umdenken ist gerade noch drin.
Sven