Hallo,
also es gibt ja die Funktion Winsetontop. Aber wie kann ich eine GUI immer im Hintergrund lassen?
Hallo,
also es gibt ja die Funktion Winsetontop. Aber wie kann ich eine GUI immer im Hintergrund lassen?
Indem Du den anderen Fenstern WinSetOnTop zuweist.
Also sichtbar soll es aber bleiben?
Ja klar .
Aber es gibt ja Programme vo man einstellen kann: "Immer im Hintergrund".
So, und wie soll man das jetzt machen?
Das gleiche brauch ich eigentlich auch, aber ich hab auch nix gefunden, auser was Oscar gesagt hat!
Also man kann ja kaum alle Fenster in den Vordergrund setzten -_-
Es gäbe auch noch die Möglichkeit zu testen, welche Fenster (ermitteln anhand der Positionen) von Deinem Fenster verdeckt würden und nur die holst Du in den Vordergrund. Das dann in einer Adlib-Funktion. Müßte eigentlich gehen (nicht getestet).
Edit: Aber wozu soll das eigentlich gut sein?
Probier mal das:
Opt("WinWaitDelay",0)
[/autoit] [autoit][/autoit] [autoit]$var = WinList()
$Bottom = 'Rechner' ;Trage hier den vollständigen Fenstertitel ein, von dem Fenster das am weitesten hinten sein soll!
For $i = $var[0][0] To 1 Step -1
If $var[$i][0] <> "" AND IsVisible($var[$i][1]) And $var[$i][0] <> $Bottom Then
WinSetOnTop($var[$i][0], "", 1)
EndIf
Next
Func IsVisible($handle)
If BitAnd( WinGetState($handle), 2 ) Then
Return 1
Else
Return 0
EndIf
EndFunc
Ich habe jetzt was anderes gefunden aber leider flackert das manchmal und ist nicht immer im Hintergrund:
[autoit]#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Const $HWND_BOTTOM = 1
Const $SWP_NOOWNERZORDER = 0x200
Const $SWP_NOACTIVATE = 16
Const $WM_EXITSIZEMOVE = 0x232
Const $SWP_NOSIZE = 1
GUIRegisterMsg($WM_ACTIVATE, "On_WM_ACTIVATE")
GUIRegisterMsg($WM_EXITSIZEMOVE, "on_WM_EXITSIZEMOVE")
$hGui = GUICreate("My GUI")
GUISetState(@SW_SHOW)
; Run the GUI until the dialog is closed
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()
Func on_WM_EXITSIZEMOVE($hWnd, $msg, $wParam, $lParam)
If $hWnd = $hGui Then
$wp = WinGetPos($hGui)
DllCall("user32.dll", "long", "SetWindowPos", "hwnd", $hWnd, "hwnd", $HWND_BOTTOM, "int", $wp[0], "int", $wp[1], _
"int", 0, "int", 0, "long", BitOR($SWP_NOSIZE, $SWP_NOACTIVATE));BitOR($SWP_NOOWNERZORDER,$SWP_NOACTIVATE))
EndIf
EndFunc ;==>on_WM_EXITSIZEMOVE
Func On_WM_ACTIVATE($hWnd, $msg, $wParam, $lParam)
Local $iState = BitAND($wParam, 0x0000FFFF), $iMinimize = BitShift($wParam, 16)
If $iState And $hWnd = $hGui Then
$wp = WinGetPos($hGui)
DllCall("user32.dll", "long", "SetWindowPos", "hwnd", $hWnd, "hwnd", $HWND_BOTTOM, "int", $wp[0], "int", $wp[1], _
"int", $wp[2], "int", $wp[3], "long", $SWP_NOACTIVATE);BitOR($SWP_NOOWNERZORDER,$SWP_NOACTIVATE))
EndIf
EndFunc ;==>On_WM_ACTIVATE
funkey: Super Script, aber mich persöhnlich nervt es wen alle Fenster im Vordergrund sind, da man den Taskmanager nicht mehr sieht
Macht doch Funkeys Script, bloß statt WinSetOnTop... nehmt ihr
[autoit]WinActivate("Progman")
[/autoit]
soweit ich mich erinnere die WindowsShell.