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, IgnoriereTitel, IgnoriereText

Parameter

Unterbefehl, Wert
Diese Parameter sind voneinander abhängig und können wie unten gezeigt genutzt werden.
FensterTitel
Der Titel oder andere Möglichkeiten zum Identifizieren des Zielfensters. Weitere Informationen finden Sie unter FensterTitel-Parameter.
FensterText
Eine Zeichenkette, die in einem der Textelemente des Zielfensters enthalten ist (eventuell vorhandene Textelemente können mit dem internen Tool Window Spy aufgedeckt werden). Versteckte Textelemente werden nur erkannt, wenn DetectHiddenText eingeschaltet ist.
IgnoriereTitel
Alle Fenster, die diesen Wert in ihren Titeln enthalten, werden ignoriert.
IgnoriereText
Alle Fenster, die diesen Wert in ihren Textelementen enthalten, werden ignoriert.

Unterbefehle

Geben Sie für Unterbefehl Folgendes an:

AlwaysOnTop

Ändert ein Fenster, so dass es immer über allen anderen Fenstern liegt.

WinSet, AlwaysOnTop , OnOffToggle, FensterTitel, FensterText, IgnoriereTitel, IgnoriereText

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 weggelassen wird oder leer ist, wird standardmäßig Toggle verwendet. Es ist möglich, das Wort Topmost anstelle von AlwaysOnTop zu verwenden.

[v1.1.30+]: Es ist möglich, die dezimalen Werte 1, 0 und -1 anstelle von On, Off bzw. Toggle zu verwenden.

Bottom

Sendet das Fenster an das untere Ende des Stapels, so dass es unter allen anderen Fenstern liegt.

WinSet, Bottom ,, FensterTitel, FensterText, IgnoriereTitel, IgnoriereText

Das gleiche kann auch durch Drücken von Alt+Esc erreicht werden.

Top

Sendet das Fenster an das obere Ende des Stapels, ohne es dabei explizit zu aktivieren.

WinSet, Top ,, FensterTitel, FensterText, IgnoriereTitel, IgnoriereText

Allerdings werden die Standardeinstellungen des Systems es wahrscheinlich in den meisten Fällen trotzdem aktivieren. Darüber hinaus könnte dieser Unterbefehl keine Wirkung haben, wenn das Betriebssystem sich gegen Anwendungen schützt, die versuchen wollen, den Fokus vom Benutzer zu stehlen (das zum Beispiel davon abhängen kann, welches Fenster gerade aktiv ist und was der Benutzer gerade macht). Eine Möglichkeit, dies zu umgehen, ist es, das Fenster kurz AlwaysOnTop zu machen und es dann wieder auszuschalten.

Disable

Deaktiviert die Interaktion mit einem Fenster.

WinSet, Disable ,, FensterTitel, FensterText, IgnoriereTitel, IgnoriereText

Wenn die Interaktion mit einem Fenster deaktiviert ist, kann der Benutzer es weder verschieben noch mit den darin enthaltenen Steuerelementen interagieren. Außerdem werden deaktivierte Fenster in der Alt-Tab-Liste nicht angezeigt.

Enable

Aktiviert die Interaktion mit einem Fenster.

WinSet, Enable ,, FensterTitel, FensterText, IgnoriereTitel, IgnoriereText

Redraw

Zeichnet ein Fenster neu.

WinSet, Redraw ,, FensterTitel, FensterText, IgnoriereTitel, IgnoriereText

Dieser Unterbefehl versucht, die Darstellung/Inhalte eines Fensters zu aktualisieren, indem es dem Betriebssystem mitteilt, dass das Fensterrechteck eine Neuzeichnung benötigt. Falls diese Vorgehensweise bei einem bestimmten Fenster nicht funktioniert, können Sie es mit WinMove versuchen. Wenn das auch nicht funktioniert, können Sie WinHide in Kombination mit WinShow ausprobieren.

Style

Ändert den Style eines Fensters.

WinSet, Style, N , FensterTitel, FensterText, IgnoriereTitel, IgnoriereText

Wenn das erste Zeichen von N ein Plus- oder Minuszeichen ist, werden die in N angegebenen Styles hinzugefügt bzw. entfernt. Wenn das erste Zeichen ein Zirkumflex (^) ist, werden die in N angegebenen Styles 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. Ein Fehler tritt auf, wenn das Zielfenster nicht gefunden wird oder der Style nicht angewendet werden darf.

Nach dem Durchführen einiger Style-Änderungen an ein sichtbares Fenster ist es wahrscheinlich notwendig, dass das Fenster mithilfe des Redraw-Unterbefehls oben neu gezeichnet werden muss. Die Style-Tabelle listet einige der häufig verwendeten Styles auf. Zum Beispiel:

WinSet, Style, -0xC00000, A  ; Entfernt die Titelleiste des aktiven Fensters (WS_CAPTION).

ExStyle

Ändert den erweiterten Style eines Fensters.

WinSet, ExStyle, N , FensterTitel, FensterText, IgnoriereTitel, IgnoriereText

Schauen Sie sich den Style-Unterbefehl an, um mehr zu erfahren. Zum Beispiel:

WinSet, ExStyle, ^0x80, FensterTitel ; Schaltet das WS_EX_TOOLWINDOW-Attribut um, das das Fenster in der Alt-Tab-Liste hinzufügt/entfernt.

Region

Ändert die Form eines Fensters zu einem Rechteck, Polygon oder einer Ellipse.

WinSet, Region , Optionen, FensterTitel, FensterText, IgnoriereTitel, IgnoriereText

Wenn der Optionen-Parameter weggelassen wird oder leer ist, wird der originale/normale Anzeigebereich des Fensters wiederhergestellt. Ansonsten können eine oder mehrere der folgenden Optionen angegeben werden, die mit Leerzeichen voneinander getrennt werden müssen:

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. Bei dem Beispiel 200-0 wäre 200 die X-Koordinate und 0 die Y-Koordinate.

E: Macht die Region zu einer Ellipse statt zu einem Rechteck. Diese Option ist nur gültig, wenn W und H vorhanden sind.

R[w-h]: Macht die Region zu einem Rechteck mit abgerundeten Ecken. Bei dem Beispiel R30-30 wäre jede Ecke eine 30x30 Ellipse. Lässt man w-h weg, 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, wird der neue Anzeigebereich ein Rechteck sein, dessen linke obere Ecke das erste (und nur dieses) X-Y-Koordinatenpaar ist. Wenn dazu noch die E-Option vorhanden ist, wird der neue Anzeigebereich eine Ellipse statt ein Rechteck sein. Zum Beispiel: WinSet, Region, 50-0 W200 H250 E, FensterTitel.

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

ErrorLevel wird bei Misserfolg auf 1 und bei Erfolg auf 0 gesetzt. Fehler treten auf, wenn: 1) das Zielfenster nicht vorhanden ist; 2) eine oder mehrere Optionen ungültig sind; 3) mehr als 2000 Koordinatenpaare angegeben sind; oder 4) die angegebene Region ungültig ist oder nicht auf das Zielfenster angewendet werden kann.

Schauen Sie sich Beispiel #7 im unteren Bereich dieser Seite an, wie man diesen Unterbefehl verwendet.

Wenn eine Region für ein Fenster festgelegt wird, das dem Skript gehört, kann das System automatisch die Methode ändern, die es zum Rendern des Fensterrahmens verwendet, und dadurch das Aussehen des Fensters ändern. Der Effekt ähnelt dem unten gezeigten Workaround #2, der das Fenster aber erst beeinflusst, wenn seine Region zurückgesetzt ist.

Bekannte Einschränkung: Eine Region für ein Fenster zu setzen, das nicht zum Skript gehört, kann zu unerwarteten Ergebnissen führen, wenn das Fenster eine Titelleiste hat und die Systemeinstellung "Desktopgestaltung" aktiviert ist. Das liegt daran, dass der sichtbare Rahmen nicht wirklich Teil des Fensters ist, sondern von einem separaten Systemprozess gerendert wird, der als "Desktop Window Manager" (kurz DWM; zu Deutsch Desktopfenster-Manager) bezeichnet 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 (was auch dazu führen kann, dass jede gesetzte Region 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, IgnoriereTitel, IgnoriereText

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.

Geben Sie das Wort Off an, um die Transparenz eines Fensters komplett zu deaktivieren. Dies ist funktional identisch zu WinSet, TransColor, Off, FensterTitel. Das Wort Off unterscheidet sich von dem Wert 255, weil es eventuell die Leistung verbessert und die Systemressourcennutzung verringert.

Mit WinSet, Transparent, 150, ahk_class Shell_TrayWnd kann die Taskleiste transparent gemacht werden. Um das klassische Startmenü auch transparent zu machen, schauen Sie sich Beispiel #5 an. Um die Untermenüs des Startmenüs ebenfalls transparent zu machen, können Sie das Skript von Beispiel #6 einfügen.

Setzt man die Transparenzstärke auf 255, bevor man Off verwendet, können Fensterneuzeichnungsprobleme wie ein schwarzer Hintergrund verhindert werden. Wenn das Fenster immer noch nicht korrekt neu gezeichnet werden kann, finden Sie unter Redraw eine mögliche Übergangslösung.

[v1.1.24.05+]: Dieser Unterbefehl funktioniert auch mit einem Fenster, das keine Titelleiste hat und keine AlwaysOnTop-Eigenschaft hat.

TransColor

Macht alle Pixel der ausgewählten Farbe innerhalb des Zielfensters unsichtbar.

WinSet, TransColor, Farbe , FensterTitel, FensterText, IgnoriereTitel, IgnoriereText

Dies macht es möglich, dass der Inhalt hinter dem Fenster durchscheint. Klickt der Benutzer auf einen unsichtbaren Pixel, wirkt sich der Klick auf das Fenster dahinter aus. Geben Sie für Farbe einen Farbnamen oder RGB-Wert an (verwenden Sie die Farbentabelle als Orientierungshilfe 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 Transparenzstufe (0-255) an. Zum Beispiel: WinSet, TransColor, EEAA99 150, FensterTitel.

Geben Sie das Wort Off an, um die Transparenz eines Fensters komplett zu deaktivieren. Dies ist funktional identisch zu WinSet, Transparent, Off, FensterTitel. Das Wort Off unterscheidet sich von dem Wert 255, weil es eventuell die Leistung verbessert und die Systemressourcennutzung verringert.

TransColor wird oft verwendet, um Bildschirmanzeigen (OSD) und andere visuelle Effekte zu erzeugen. Ein Beispiel dazu finden Sie auf der GUI-Seite ganz unten.

Setzt man die Transparenzstärke auf 255, bevor man Off verwendet, können Fensterneuzeichnungsprobleme wie ein schwarzer Hintergrund verhindert werden. Wenn das Fenster immer noch nicht korrekt neu gezeichnet werden kann, finden Sie unter Redraw eine mögliche Übergangslösung.

Um die bestehende TransColor-Einstellung eines Fensters zu ändern, ist es eventuell erforderlich, die Transparenz auszuschalten, bevor die Änderung vollzogen werden kann.

[v1.1.24.05+]: Dieser Unterbefehl funktioniert auch mit einem Fenster, das keine Titelleiste hat und keine AlwaysOnTop-Eigenschaft hat.

Bemerkungen

Wenn ErrorLevel oben nicht erwähnt wird, bleibt er unverändert.

Zwar wird Transparenz in Windows 2000/XP oder höher unterstützt, allerdings könnten die Transparenzeinstellungen eines Fensters erst ab Windows XP abrufbar sein (via WinGet).

Die AlwaysOnTop-Eigenschaft eines SplashText-Fensters kann wie folgt entfernt werden:

WinSet, AlwaysOnTop, Off, Mein Splash-Fenstertitel

Fenstertitel und -texte sind Groß-/Kleinschreibung-sensitiv. Versteckte Fenster werden nur erkannt, wenn DetectHiddenWindows eingeschaltet ist.

WinGet, WinHide, WinSetTitle, WinMove, WinActivate, Control

Beispiele

Macht das Fenster ein wenig transparent.

WinSet, Transparent, 200, Unbenannt - Editor

Macht alle weißen Pixel im Texteditor unsichtbar.

WinSet, TransColor, White, Unbenannt - Editor

Schaltet den "Immer im Vordergrund"-Zustand des Taschenrechners um.

WinSet, AlwaysOnTop, Toggle, Rechner

Demonstriert den Effekt von den Unterbefehlen Transparent und TransColor. Hinweis: Drücken Sie einen dieser Hotkeys, während sich der Mauszeiger über einen via TransColor unsichtbar gemachten Pixel befindet, wird der Hotkey stattdessen mit dem Fenster hinter dem Pixel interagieren! Außerdem wird Win+G erst ab Windows XP funktionieren, weil 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
; Es scheint so, als müsste man erst jede vorhandene Transparenz ausschalten:
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 unterhalb des Mauszeigers auszuschalten.
MouseGetPos,,, MausFenster
WinSet, TransColor, Off, ahk_id %MausFenster%
return

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

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

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 Menüs früher erkennen.
if WinExist("ahk_class #32768")
    WinSet, Transparent, 150  ; Verwendet das gefundene Fenster von der darüberliegenden Zeile.
return

Verwendung des Region-Unterbefehls:

Das folgende Beispiel macht alle Bereiche des Texteditors außerhalb dieses Rechtecks unsichtbar.

WinSet, Region, 50-0 W200 H250, ahk_class Notepad

Das folgende Beispiel bewirkt dasselbe wie oben, aber mit abgerundeten Ecken.

WinSet, Region, 50-0 W200 H250 R40-40, ahk_class Notepad

Das folgende Beispiel erstellt eine Ellipse anstelle eines Rechtecks.

WinSet, Region, 50-0 W200 H250 E, ahk_class Notepad

Das folgende Beispiel erstellt ein nach unten gerichtetes Dreieck.

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

Das folgende Beispiel stellt den originalen/normalen Anzeigebereich des Fensters wieder her.

WinSet, Region,, ahk_class Notepad

Das folgende Beispiel erstellt ein durchsichtiges rechteckiges Loch innerhalb des Texteditors (oder eines anderen Fensters). Es sind zwei Rechtecke unten angegeben: ein Äußeres und ein Inneres. Jedes Rechteck besteht aus 5 X/Y-Koordinatenpaaren, weil das erste Koordinatenpaar am Ende wiederholt wird, um das Rechteck wieder 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