Hallo,
wie kann man überprüfen, ob ein Fenster im Vordergrund ist?
Mit WinGetState gehts gehts ja nicht.
Hallo,
wie kann man überprüfen, ob ein Fenster im Vordergrund ist?
Mit WinGetState gehts gehts ja nicht.
Func IsVisible($handle)
Return BitAND(WinGetState($handle), 2)
EndFunc ;==>IsVisible
Geht das nicht?
Ging das nicht einfach mit WinActive ?
Edit: Achso du willst prüfen ob es OnTop ist
Klar gehts mit WinGetState:
[autoit]HotKeySet('#t', '_status')
Global $aGui[3]
$aGui[0] = GUICreate('1', -1, -1, 100, 100)
$aGui[1] = GUICreate('2', -1, -1, 140, 140)
$aGui[2] = GUICreate('3', -1, -1, 180, 180)
GUISetState(@SW_SHOW, $aGui[2])
GUISetState(@SW_SHOW, $aGui[1])
GUISetState(@SW_SHOW, $aGui[0])
Do
Until GUIGetMsg() = -3
Func _status()
For $i = 0 To UBound($aGui) -1
If WinGetState($aGui[$i]) = 15 Then MsgBox(0, 'Im Vordergrund', WinGetTitle($aGui[$i]))
Next
EndFunc
Und WinActive tuts auch.
So funktioniert es aber nicht:
[autoit]MsgBox(0,"",WinGetState("Arbeitsplatz","")) ;7
[/autoit][autoit][/autoit][autoit]WinSetOnTop("Arbeitsplatz","",1)
[/autoit][autoit][/autoit][autoit]MsgBox(0,"",WinGetState("Arbeitsplatz",""))
[/autoit]Ich erhalte immer nur die 7.
Du erhälst 7 da:
1 = Window exists
+
2 = Window is visible
+
4 = Window is enabled
= 7
Das Fenster ist nicht aktiv, da du wahrscheinlich das Skript in Scite oder vom Desktop gestartet hast, und dann eben kurz Scite oder der Desktop aktiv ist.
Den Status würde ich immer mit BitAnd abfragen so wie im Hilfe-Beispiel, aber wie gesagt WinActive tut's auch.
Wenn du das Fenster selbst nach vorn holst (per Mausklick) wird es aktiviert, das tust du in deinem Skriptbeispiel nicht.
So klappt es:
ConsoleWrite(WinGetState("Arbeitsplatz","") & @CRLF)
WinSetOnTop("Arbeitsplatz","",1)
WinActivate("Arbeitsplatz","")
ConsoleWrite(WinGetState("Arbeitsplatz","") & @CRLF)
Das funktioniert aber nicht ganz. Also ich habe eine GUI. Diese soll sich immer im Vordergrund holen, wenn es nicht im Vordergrund ist.
Aber es darf sich nicht aktivieren (WinActivate).
Dann lass doch einfach WinActivate weg .
Edit: Dein Miniplayer in Desktopradio ist doch auch immer im Vordergund, wie machst du es da ?
das TopMost-Attribut kann man so auslesen:
[autoit]
; http://www.autoit.de/index.php?page=Thread&postID=44929
Func _WinIsOnTop($WindowHandle)
Local $long = _WinAPI_GetWindowLong(WinGetHandle($WindowHandle),$GWL_EXSTYLE)
Return BitAND($long,8)=8 ; $WS_EX_TOPMOST = 8
EndFunc
und wenn man mit WinSetOnTop($Fenster,1) das Fenster auf immer im Vordergrund stellt
oder beim GUICreate als Exstyle $WS_EX_TOPMOST angibt, ist das Fenster immer im Vordergrund.