WinSet

Führt eine Vielzahl von Änderungen an einem bestimmten Fenster durch, wie z.B. "immer im Vordergrund" und Transparenz.

WinSet, Unterbefehl, Wert , FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Parameter

Unterbefehl, Wert
Diese Parameter sind voneinander abhängig und können wie unten gezeigt verwendet werden.
FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Wenn jeder dieser Parameter leer ist oder weggelassen wird, wird das Zuletzt Gefundene Fenster verwendet. Andernfalls geben Sie für FensterTitel einen Fenstertitel oder andere Kriterien zur Identifizierung des Zielfensters und/oder für FensterText eine Teilzeichenkette aus einem Textelement des Zielfensters an (Textelemente können mit dem internen Tool "Window Spy" in Erfahrung gebracht werden).

AusnahmeTitel und AusnahmeText können verwendet werden, um ein oder mehrere Fenster anhand ihres Titels oder Textes auszuschließen. Ihre Angabe ähnelt der von FensterTitel und FensterText, außer dass AusnahmeTitel keine anderen Kriterien als den Fenstertitel erkennt.

Fenstertitel und -texte sind Groß-/Kleinschreibung-sensitiv. Standardmäßig werden versteckte Fenster nicht erkannt und versteckte Textelemente erkannt, was mit DetectHiddenWindows und DetectHiddenText geändert werden kann. Standardmäßig muss ein Fenstertitel mit dem angegebenen FensterTitel oder AusnahmeTitel beginnen, um eine Übereinstimmung zu sein, was mit SetTitleMatchMode geändert werden kann.

Unterbefehle

Geben Sie für Unterbefehl Folgendes an:

AlwaysOnTop

Bewirkt, dass ein Fenster immer über allen anderen Fenstern angezeigt wird.

WinSet, AlwaysOnTop , OnOffToggle, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Geben Sie für OnOffToggle On an, um die Einstellung einzuschalten, Off, um sie auszuschalten, oder Toggle, um sie auf den entgegengesetzten Zustand zu setzen. Wenn OnOffToggle leer ist oder weggelassen wird, wird standardmäßig Toggle verwendet. Anstelle von AlwaysOnTop kann auch Topmost verwendet werden.

[v1.1.30+]: Anstelle von On, Off und Toggle können auch die Dezimalwerte 1, 0 und -1 verwendet werden.

Bottom

Setzt ein Fenster an das Ende des Stapels, d.h. unter alle anderen Fenster.

WinSet, Bottom ,, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Der Effekt ähnelt dem Drücken von Alt+Esc.

Top

Setzt ein Fenster an den Anfang des Stapels, ohne es explizit zu aktivieren.

WinSet, Top ,, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Die Standardeinstellungen des Systems werden jedoch in den meisten Fällen dazu führen, dass es trotzdem aktiviert wird. Das Betriebssystem kann außerdem Anwendungen blockieren, die versuchen, den Fokus vom Benutzer zu stehlen, so dass dieser Unterbefehl möglicherweise keine Wirkung hat (dies hängt unter anderem davon ab, welche Art von Fenster gerade aktiv ist und was der Benutzer gerade tut). Dies lässt sich z.B. umgehen, indem die Immer-Im-Vordergrund-Eigenschaft des Fensters kurz ein- und wieder ausgeschaltet wird.

Disable

Verbietet die Interaktion mit einem Fenster.

WinSet, Disable ,, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Wenn die Interaktion mit einem Fenster verboten ist, kann der Benutzer das Fenster weder verschieben noch mit dessen Steuerelementen interagieren. Außerdem werden solche Fenster nicht in der Alt-Tab-Liste angezeigt.

Enable

Erlaubt die Interaktion mit einem Fenster.

WinSet, Enable ,, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Redraw

Zeichnet ein Fenster neu.

WinSet, Redraw ,, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Dieser Unterbefehl versucht, das Aussehen/den Inhalt eines Fensters zu aktualisieren, indem er dem Betriebssystem mitteilt, dass das Fensterrechteck neu gezeichnet werden muss. Wenn dieser Ansatz für ein bestimmtes Fenster nicht funktioniert, versuchen Sie WinMove. Wenn das nicht funktioniert, versuchen Sie WinHide in Kombination mit WinShow.

Style

Ändert den Style eines Fensters.

WinSet, Style, N , FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Wenn das erste Zeichen von N ein Plus- oder Minuszeichen ist, werden die Styles in N hinzugefügt bzw. entfernt. Wenn das erste Zeichen ein Zirkumflex (^) ist, werden alle Styles in N auf den entgegengesetzten Zustand geschaltet. Wenn das erste Zeichen eine Ziffer ist, wird der Style des Fensters komplett mit N überschrieben.

ErrorLevel wird bei Misserfolg auf 1 und bei Erfolg auf 0 gesetzt. Misserfolg tritt auf, wenn das Zielfenster nicht gefunden wurde oder der Style nicht angewendet werden darf.

Nachdem einige Style-Änderungen an einem sichtbaren Fenster vorgenommen wurden, muss das Fenster eventuell mit dem Redraw-Unterbefehl neu gezeichnet werden. Häufig verwendete Styles finden Sie unter Fenster- und Steuerelement-Styles. Zum Beispiel entfernt Folgendes die Titelleiste des Fensters (WS_CAPTION): WinSet, Style, -0xC00000.

ExStyle

Ändert den erweiterten Style eines Fensters.

WinSet, ExStyle, N , FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Details finden Sie beim Style-Unterbefehl oben. Zum Beispiel schaltet Folgendes das WS_EX_TOOLWINDOW-Attribut um, wodurch das Fenster in der Alt-Tab-Liste hinzugefügt/entfernt wird: WinSet, ExStyle, ^0x80.

Region

Ändert die Form eines Fensters in ein Rechteck, Polygon oder eine Ellipse.

WinSet, Region , Optionen, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Wenn Optionen leer ist oder weggelassen wird, wird der originale/normale Anzeigebereich des Fensters wiederhergestellt. Andernfalls geben Sie eine oder mehrere der folgenden Optionen an, jeweils durch ein oder mehrere Leerzeichen getrennt:

Wn: Breite des Rechtecks oder der Ellipse. Zum Beispiel: w200.

Hn: Höhe des Rechtecks oder der Ellipse. Zum Beispiel: h200.

X-Y: Ein oder mehrere X-Y-Koordinatenpaare. Zum Beispiel bewirkt 200-0, dass 200 für die X-Koordinate und 0 für die Y-Koordinate verwendet wird.

E: Ändert den Bereich in eine Ellipse anstelle eines Rechtecks. Diese Option ist nur gültig, wenn W und H vorhanden sind.

Rw-h: Ändert den Bereich in ein Rechteck mit abgerundeten Ecken. Zum Beispiel bewirkt r30-30, dass eine 30x30 Ellipse für jede Ecke verwendet wird. Wenn w-h weggelassen wird, wird standardmäßig 30-30 verwendet. R ist nur gültig, wenn W und H vorhanden sind.

Rechteck oder Ellipse: Wenn die Optionen W und H vorhanden sind, ist der neue Anzeigebereich ein Rechteck, dessen linke obere Ecke durch das erste (und nur dieses) X-Y-Koordinatenpaar bestimmt wird. Wenn zusätzlich die E-Option vorhanden ist, ist der neue Anzeigebereich eine Ellipse anstelle eines Rechtecks. Zum Beispiel: WinSet, Region, 50-0 w200 h250 E.

Polygon: Wenn die Optionen W und H fehlen, ist der neue Anzeigebereich ein Polygon (Vieleck), das durch mehrere X-Y-Koordinatenpaare bestimmt wird (jedes Koordinatenpaar ist ein Punkt innerhalb des Fensters, relativ zu dessen oberen linken Ecke). Wenn z.B. drei Koordinatenpaare angegeben sind, ist der neue Anzeigebereich in den meisten Fällen ein Dreieck. Die Reihenfolge der Koordinatenpaare zueinander ist manchmal wichtig. Zusätzlich kann das Wort Wind in den Optionen angegeben werden, um die Winding-Methode anstelle der Alternating-Methode zur Bestimmung des Polygonbereichs zu verwenden.

ErrorLevel wird bei Misserfolg auf 1 und bei Erfolg auf 0 gesetzt. Misserfolg tritt auf, wenn: 1) das Zielfenster nicht existiert; 2) eine oder mehrere Optionen ungültig sind; 3) mehr als 2000 Koordinatenpaare angegeben sind; oder 4) der angegebene Bereich ungültig ist oder nicht auf das Zielfenster angewendet werden konnte.

Informationen über die Verwendung dieses Unterbefehls finden Sie unter Beispiel #7 am Ende dieser Seite.

Wenn ein Bereich für ein Fenster gesetzt wird, das zum Skript gehört, kann das System automatisch die Methode ändern, mit der der Rahmen des Fensters gerendert wird, und so sein Aussehen verändern. Der Effekt ähnelt dem unten gezeigten Workaround #2, betrifft aber nur das Fenster, bis sein Bereich zurückgesetzt wird.

Bekannte Einschränkung: Das Setzen eines Bereichs für ein Fenster, das nicht zum Skript gehört, kann zu unerwarteten Ergebnissen führen, wenn das Fenster eine Titelleiste hat und das System die Desktopgestaltung aktiviert hat. Der Grund dafür ist, dass der sichtbare Rahmen nicht wirklich Teil des Fensters ist, sondern von einem separaten Systemprozess namens Desktopfenster-Manager (engl. Desktop Window Manager, kurz DWM) gerendert wird. Beachten Sie, dass die Desktopgestaltung in Windows 8 und höher immer aktiviert ist. Sie können einen der beiden folgenden Workarounds verwenden:

; #1: Titelleiste des Fensters entfernen.
WinSet Style, -0xC00000, Fenstertitel

; Um es rückgängig zu machen:
WinSet Style, +0xC00000, Fenstertitel
; #2: DWM-Rendering des Fensterrahmens deaktivieren.
DllCall("dwmapi\DwmSetWindowAttribute", "ptr", WinExist("Fenstertitel")
  , "uint", DWMWA_NCRENDERING_POLICY := 2, "int*", DWMNCRP_DISABLED := 1, "uint", 4)
  
; Um es rückgängig zu machen (wodurch evtl. auch ein gesetzter Bereich ignoriert wird):
DllCall("dwmapi\DwmSetWindowAttribute", "ptr", WinExist("Fenstertitel")
  , "uint", DWMWA_NCRENDERING_POLICY := 2, "int*", DWMNCRP_ENABLED := 2, "uint", 4)

Transparent

Macht ein Fenster halbtransparent.

WinSet, Transparent , N, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Geben Sie für N eine Zahl zwischen 0 und 255 an, um die Transparenzstärke zu bestimmen: 0 macht das Fenster durchsichtig und 255 undurchsichtig. Wenn N leer ist oder weggelassen wird, wird standardmäßig 0 verwendet.

Geben Sie das Wort Off für N an, um die Transparenz eines Fensters komplett zu deaktivieren. Dies hat denselben Effekt wie WinSet, TransColor, Off. Das Wort Off unterscheidet sich vom Wert 255, da es die Performanz verbessern und den Verbrauch von Systemressourcen verringern kann.

Mit WinSet, Transparent, 150, ahk_class Shell_TrayWnd kann die Taskleiste transparent gemacht werden. Um das klassische Startmenü transparent zu machen, siehe Beispiel #5. Um die Untermenüs des Startmenüs transparent zu machen, fügen Sie zusätzlich das Skript aus Beispiel #6 ein.

Wenn die Transparenzstärke vor der Verwendung von Off auf 255 gesetzt wird, können Probleme beim Neuzeichnen von Fenstern, wie z.B. ein schwarzer Hintergrund, vermieden werden. Wenn das Fenster immer noch nicht korrekt neu gezeichnet wird, finden Sie unter Redraw einen möglichen Workaround.

[v1.1.24.05+]: Dieser Unterbefehl funktioniert auch mit Fenstern, die keine Titelleiste und keine Immer-Im-Vordergrund-Eigenschaft haben.

TransColor

Macht alle Pixel einer bestimmten Farbe im Zielfenster unsichtbar.

WinSet, TransColor, Farbe , FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Dies ermöglicht es, den Inhalt des dahinter liegenden Fensters durchscheinen zu lassen. Wenn der Benutzer auf ein unsichtbares Pixel klickt, wirkt sich der Klick auf das Fenster dahinter aus. Geben Sie für Farbe einen Farbnamen oder RGB-Wert an (schauen Sie in der Farbentabelle nach oder verwenden Sie PixelGetColor im RGB-Modus). Um den sichtbaren Bereich eines Fensters zusätzlich transparent zu machen, fügen Sie ein Leerzeichen (kein Komma) gefolgt von der Transparenzstärke (0-255) an. Zum Beispiel: WinSet, TransColor, EEAA99 150.

Geben Sie das Wort Off an, um die Transparenz eines Fensters komplett zu deaktivieren. Dies hat denselben Effekt wie WinSet, Transparent, Off. Das Wort Off unterscheidet sich vom Wert 255, da es die Performanz verbessern und den Verbrauch von Systemressourcen verringern kann.

TransColor wird häufig verwendet, um Bildschirmanzeigen (engl. On-Screen Display, kurz OSD) und andere visuelle Effekte zu erzeugen. Ein Beispiel dazu finden Sie auf der GUI-Seite ganz unten.

Wenn die Transparenzstärke vor der Verwendung von Off auf 255 gesetzt wird, können Probleme beim Neuzeichnen von Fenstern, wie z.B. ein schwarzer Hintergrund, vermieden werden. Wenn das Fenster immer noch nicht korrekt neu gezeichnet wird, finden Sie unter Redraw einen möglichen Workaround.

Um die vorhandene TransColor-Einstellung eines Fensters zu ändern, muss eventuell die Transparenz ausgeschaltet werden, bevor die Änderung vorgenommen werden kann.

[v1.1.24.05+]: Dieser Unterbefehl funktioniert auch mit Fenstern, die keine Titelleiste und keine Immer-Im-Vordergrund-Eigenschaft haben.

Bemerkungen

ErrorLevel wird durch diesen Befehl nicht verändert, außer wo oben vermerkt.

Obwohl Transparenz in Windows 2000/XP oder höher unterstützt wird, ist das Abrufen der aktuellen Transparenzeinstellungen eines Fensters nur in Windows XP oder höher möglich (via WinGet).

Die Immer-Im-Vordergrund-Eigenschaft eines SplashText-Fensters kann wie folgt entfernt werden:

WinSet, AlwaysOnTop, Off, Mein Splash-Fenstertitel

WinGet, WinHide, WinSetTitle, WinMove, WinActivate, Control

Beispiele

Macht Notepad ein wenig transparent.

WinSet, Transparent, 200, Unbenannt - Editor

Macht alle weißen Pixel in Notepad unsichtbar. Dieses Beispiel funktioniert evtl. nicht korrekt mit dem neuen Notepad in Windows 11 oder höher.

WinSet, TransColor, White, Unbenannt - Editor

Schaltet den Immer-Im-Vordergrund-Zustand des Taschenrechners um.

WinSet, AlwaysOnTop, Toggle, Rechner

Zeigt die Effekte der Unterbefehle Transparent und TransColor. Hinweis: Wenn Sie einen dieser Hotkeys drücken, während sich der Mauszeiger über einem Pixel befindet, das mit TransColor unsichtbar gemacht wurde, interagiert der Hotkey stattdessen mit dem Fenster hinter dem Pixel! Außerdem wird Win+G erst ab Windows XP funktionieren, da Windows 2000 das Abrufen von Transparenzeinstellungen nicht unterstützt.

#t::  ; Drücken Sie WIN+T, um die Farbe unter dem Mauszeiger unsichtbar zu machen.
MouseGetPos, MausX, MausY, MausFenster
PixelGetColor, MausRGB, %MausX%, %MausY%, RGB
; Scheinbar muss zuerst eine vorhandene Transparenz ausgeschaltet werden:
WinSet, TransColor, Off, ahk_id %MausFenster%
WinSet, TransColor, %MausRGB% 220, ahk_id %MausFenster%
return

#o::  ; Drücken Sie WIN+O, um die Transparenz des Fensters unter dem Mauszeiger auszuschalten.
MouseGetPos,,, MausFenster
WinSet, TransColor, Off, ahk_id %MausFenster%
return

#g::  ; Drücken Sie WIN+G, um die aktuellen Einstellungen des Fensters unter dem Mauszeiger anzuzeigen.
MouseGetPos,,, MausFenster
WinGet, Transparenz, Transparent, ahk_id %MausFenster%
WinGet, TransFarbe, TransColor, ahk_id %MausFenster%
ToolTip Transparenz:`t%Transparenz%`nTransFarbe:`t%TransFarbe%
return

Macht das klassische Startmenü transparent (um auch die Untermenüs des Startmenüs transparent zu machen, siehe Beispiel #6).

DetectHiddenWindows, On
WinSet, Transparent, 150, ahk_class BaseBar

Macht alle oder bestimmte Menüs systemweit transparent, sobald sie erscheinen. Beachten Sie, dass so ein Skript nur die Menüs von anderen Skripten transparent machen kann, nicht seine eigenen.

#Persistent
SetTimer, AufMenüWarten, 5
return  ; Ende des automatischen Ausführungsbereichs.

AufMenüWarten:
DetectHiddenWindows, On  ; Könnte eine frühere Erkennung des Menüs ermöglichen.
if WinExist("ahk_class #32768")
    WinSet, Transparent, 150  ; Verwendet das gefundene Fenster von der Zeile darüber.
return

Verwendung des Region-Unterbefehls. Diese Beispiele funktionieren evtl. nicht korrekt mit dem neuen Notepad in Windows 11 oder höher.

Folgendes macht alle Notepad-Bereiche außerhalb dieses Rechtecks unsichtbar.

WinSet, Region, 50-0 w200 h250, ahk_class Notepad

Folgendes bewirkt dasselbe wie oben, wobei die Ecken auf 40x40 abgerundet sind.

WinSet, Region, 50-0 w200 h250 r40-40, ahk_class Notepad

Folgendes erstellt eine Ellipse anstelle eines Rechtecks.

WinSet, Region, 50-0 w200 h250 E, ahk_class Notepad

Folgendes erstellt ein nach unten gerichtetes Dreieck.

WinSet, Region, 50-0 250-0 150-250, ahk_class Notepad

Folgendes stellt den originalen/normalen Anzeigebereich des Fensters wieder her.

WinSet, Region,, ahk_class Notepad

Folgendes erstellt ein durchsichtiges rechteckiges Loch innerhalb des Notepad-Fensters (oder eines anderen Fensters). Unten sind zwei Rechtecke angegeben: Ein äußeres und ein inneres. Jedes Rechteck besteht aus 5 X/Y-Koordinatenpaaren, da das erste Koordinatenpaar am Ende wiederholt wird, um das Rechteck zu "schließen".

WinSet, Region, 0-0 300-0 300-300 0-300 0-0   100-100 200-100 200-200 100-200 100-100, ahk_class Notepad