Hallo zusammen,
gibt es eine Möglichkeit, heraus zu bekommen, wann die Maus über einem Fenster/ Button ist? Ich möchte eigentlich dafür nicht dauerhaft die Mauskoordinaten überwachen.
Hallo zusammen,
gibt es eine Möglichkeit, heraus zu bekommen, wann die Maus über einem Fenster/ Button ist? Ich möchte eigentlich dafür nicht dauerhaft die Mauskoordinaten überwachen.
ja so eine möglickeit gibt es und zwar mit
[autoit]GUIGetCursorInfo
[/autoit]
damit kannst du gucken über welchem Control sich die maus befindet, guck mal in der hilfe nach.
mfg
hauke96
ach ja, mir fällt gerade ein feature ein, dass ich später auch einbauen wollte, und zwar, dass sich das gui selber am bildrand ausblendet und, wenn die maus in der nähe ist, wieder einblendet. hat schonmal jmd sowas umgesetzt? das dürfte mir ja auch weiterhelfen.
Du meinst sowas wie RocketDock?
Einfach die GUI außerhalb des Bildschirmes schieben und wenn die Maus unter zB 800 Pixeln ist, dann soll die GUI wieder hoch kommen
DFPWare
genau sowas. aber prüft so ein programm auch dauerhaft im hintergrund die mausposition? gäbs nicht z. B. die möglichkeit, einen dummy dort zu platzieren, der direkt auf die maus reagiert?
Eigentlich prüft er immer die Mausposition wenn du ihm das sagst
DFPWare
Suchst du vllt sowas?
WinSlide UDF
ZitatEigentlich prüft er immer die Mausposition wenn du ihm das sagst
Mit GUIGetCursorInfo ist es leider nicht so, da kein Array zurückgegeben wird wenn der Fokus auf ein anderes fenster gesetzt wird. Man könnte es mit MouseGetPos überprüfen indem man sich die Position und die Größe des Fenster mit WinGetPos besorgt. Die Rechnung wäre dann:
if MausX > WinX and MausX < WinX+WinWidth and MausY > WinY and MausY < WinY+WinHeight Then ---
also mir reicht ja die info, ob die maus über meiner gui ist, oder nicht. wenn also kein array zurück kommt, ist sie es nicht. oder seh ich das falsch?
Nein, es wird nur kein Array zurückgegeben wenn der Fokus nicht auf dem Fenster liegt.
Schnelles Beispiel:
Global $sTitel = "SetOnTopGUI"
Global $iWidth = @DesktopWidth
Global $iHeight = 100
GUICreate($sTitel, $iWidth, $iHeight, 0, 0)
GUISetState(@SW_HIDE)
While 1
$aMouse = MouseGetPos()
$aWin = WinGetPos($sTitel, "")
If $aMouse[0] > $aWin[0] And $aMouse[0] < $aWin[0] + $aWin[2] And $aMouse[1] > $aWin[1] And $aMouse[1] < $aWin[3] Then
GUISetState(@SW_SHOW)
Else
GUISetState (@SW_HIDE)
EndIf
WEnd
Zitatalso mir reicht ja die info, ob die maus über meiner gui ist, oder nicht. wenn also kein array zurück kommt, ist sie es nicht. oder seh ich das falsch?
Wenn GUIGetCursorInfo() ein Array zurückgibts ist die Maus auf der Gui und die Gui hat Focus.
Wenn @error gesetzt wird ist die Maus nicht auf der Gui oder die Gui hat den Focus nicht.
Hi,
folgende Lösung funzt bei mir bis jetzt perfekt, danke für eure hilfe.
[autoit]While 1
$Info = GUIGetCursorInfo($MainGUI)
If $Info[4] = 3 And WinGetState($Title) = 5 Then
$WinHandleOld = $WinHandle
$WinHandle = WinGetHandle("[active]")
If $WinHandle = WinGetHandle($MainGUI) Then
$WinHandle = $WinHandleOld
EndIf
ConsoleWrite($Info[4]&" "&WinGetTitle($WinHandle)&" "&@CRLF)
EndIf
Sleep(100)
WEnd
ach ja, mir fällt gerade ein feature ein, dass ich später auch einbauen wollte, und zwar, dass sich das gui selber am bildrand ausblendet und, wenn die maus in der nähe ist, wieder einblendet. hat schonmal jmd sowas umgesetzt? das dürfte mir ja auch weiterhelfen.
Sowas hab ich mir erst neulich gebastelt, findest du hier: https://autoit.de/index.php?page…6408#post226408
Sind aber noch Fehler drin, die überarbeitete Fassung hab ich nicht mehr gepostet.
Bei mir wird einfach in der GUI Schleife mit mousegetpos geprüft ob sich die Maus im Slidein Bereich des Desktops befindet bzw links von der GUI wenn wieder ausgeblendet werden soll.
Das besondere an meiner Sidebar ist eher die automatische Anpassung an wechselnde Bildschirmauflösungen.