Hi,
ich habe eine GUI die schließen möchte sobald man mit der Maus außerhalb der GUI ist. Jemand eine Idee wie ich das machen könnte?
Hi,
ich habe eine GUI die schließen möchte sobald man mit der Maus außerhalb der GUI ist. Jemand eine Idee wie ich das machen könnte?
z.B. so:
[autoit]#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 633, 447, 192, 124)
GUISetState(@SW_SHOW)
Sleep(2000)
[/autoit][autoit][/autoit][autoit]While 1
$Msg = GUIGetMsg()
$test = GUIGetCursorInfo ( )
If $test[0] < 0 Or $test[1] < 0 Or $test[0] > 633 Or $test[1] > 447 Then
MsgBox(0,"!","Fenster wurde verlassen!")
EndIf
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Mausposition mit position der gui vergleichen ?
Ist naheliegend oder ?
mfg Ubuntu
Edit: zu spät :pinch:
und Cartans Lösung ist sogar noch besser. Hut ab
Cartan12 GUIGetCursorInfo geht bei GUI nicht
@Ubuntu habs erstmal so gemacht mit MousGetPOs, dachte aber vielleicht hat noch jemand andere Idee.
GUIGetCursorInfo geht bei GUI nicht
Sorry, aber den Satz hab ich jetzt nicht so ganz verstanden
GUIGetCursorInfo soll bei keiner GUI gehen
Mein Beispiel klappt bei mir...
Cartan12 GUIGetCursorInfo geht bei GUI nicht
@Ubuntu habs erstmal so gemacht mit MousGetPOs, dachte aber vielleicht hat noch jemand andere Idee.
So sollte es funktionieren:
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 633, 447, 192, 124)
GUISetState(@SW_SHOW)
Sleep(2000)
[/autoit] [autoit][/autoit] [autoit]While 1
$Msg = GUIGetMsg()
$test = GUIGetCursorInfo ( )
If @error Then
MsgBox(0, '', "Fenster inaktiv!")
WinActivate($Form1)
ElseIf $test[0] < 0 Or $test[1] < 0 Or $test[0] > 633 Or $test[1] > 447 Then
MsgBox(0,"!","Fenster wurde verlassen!")
EndIf
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Ach ja, hab vergessen, dass die GUI aktiv sein muss...
Hier noch eine Version mit Maus-Positions-Abfrage:
$hGui = GUICreate('Test', 600, 600)
GUISetState(@SW_SHOW, $hGui)
HotKeySet('!s', '_Show') ; [ALT] + [s] um das Fenster wieder anzuzeigen
MouseMove(@DesktopWidth / 2, @DesktopHeight / 2, 0) ; Maus in der Mitte positionieren
Do
$aMousePos = MouseGetPos()
$aWinPos = WinGetPos($hGui)
If $aMousePos[0] < $aWinPos[0] Or $aMousePos[0] > ($aWinPos[0] + $aWinPos[2]) _
Or $aMousePos[1] < $aWinPos[1] Or $aMousePos[1] > ($aWinPos[1] + $aWinPos[3]) Then GUISetState(@SW_HIDE, $hGui)
Until GUIGetMsg() = -3
Func _Show()
MouseMove(@DesktopWidth / 2, @DesktopHeight / 2, 0)
GUISetState(@SW_SHOW, $hGui)
EndFunc
Ich habs nun so realisiert:
[autoit]
While 1
$pos = MouseGetPos()
If $pos[0] > 252 Or $pos[1] < @DesktopHeight - 532 Then
GUISetState(@SW_HIDE, $Startmenu)
ExitLoop
EndIf
EndSwitch
WEnd
Fürs nächste mal geht auch das hier:
[autoit]Func _CheckForWinHover($hWnd)
Local $aResult, $aWPos = WinGetPos($hWnd), $aMPos = MouseGetPos()
Local $tRect = DllStructCreate("int Left;int Top;int Right;int Bottom")
Local $iLeft = $aWPos[0], $iTop = $aWPos[1], $iWidth = $aWPos[2], $iHeight = $aWPos[3]
Local $iX = $aMPos[0], $iY = $aMPos[1]
DllStructSetData($tRect, "Left", $iLeft)
DllStructSetData($tRect, "Top", $iTop)
DllStructSetData($tRect, "Right", $iLeft + $iWidth)
DllStructSetData($tRect, "Bottom", $iTop + $iHeight)
$aResult = DllCall("User32.dll", "int", "PtInRect", "ptr", DllStructGetPtr($tRect), "int", $iX, "int", $iY)
If @error Then Return SetError(@error, 0, False)
Return $aResult[0] <> 0
EndFunc ;==>_CheckForWinHover