Seite 1 von 1

Maus aussperren

Verfasst: 01.03.2006 19:26
von Sven
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

Verfasst: 02.03.2006 16:28
von Cadogan
Vielleicht hilft dir das hier ja weiter?

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

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

Verfasst: 02.03.2006 17:03
von Hades
Versuch es mal besser hiermit:

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
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).

Verfasst: 03.03.2006 11:38
von Sven
@ Hades

Ja, so funktioniert es! Ich hab es erst mit

Code: Alles auswählen

ClipCursor_(*rect)
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

Verfasst: 03.03.2006 14:29
von Hades
Was spielst Du denn da? 'Catch The Mouse' ? :mrgreen:

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. :oops:

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 

Verfasst: 03.03.2006 20:48
von Sven
>>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