WinSetRegion

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

WinSetRegion Optionen, FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Parameter

Optionen

Typ: Zeichenkette

Wenn leer oder weggelassen, 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: WinSetRegion "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.

FensterTitel, FensterText, AusnahmeTitel, AusnahmeText

Typ: Zeichenkette, Integer oder Objekt

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 kann ein Fenstertitel den angegebenen FensterTitel oder AusnahmeTitel an beliebiger Stelle enthalten, um eine Übereinstimmung zu sein, was mit SetTitleMatchMode geändert werden kann.

Fehlerbehandlung

Es wird ein TargetError ausgelöst, wenn das Fenster nicht gefunden werden konnte.

Es wird ein ValueError ausgelöst, wenn ungültige Optionen oder mehr als 2000 Koordinatenpaare angegeben sind.

Es wird ein OSError ausgelöst, wenn die angegebene Region ungültig ist oder nicht auf das Zielfenster angewendet werden konnte.

Bemerkungen

Mit MouseGetPos kann die ID des Fensters unter dem Mauszeiger abgerufen werden.

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.
WinSetStyle "-0xC00000", "Fenstertitel"

; Um es rückgängig zu machen:
WinSetStyle "+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)

Win-Funktionen, Control-Funktionen

Beispiele

Macht alle Notepad-Bereiche außerhalb dieses Rechtecks unsichtbar. Dieses Beispiel funktioniert evtl. nicht korrekt mit dem neuen Notepad in Windows 11 oder höher.

WinSetRegion "50-0 w200 h250", "ahk_class Notepad"

Dasselbe wie oben, wobei die Ecken auf 40x40 abgerundet sind. Dieses Beispiel funktioniert evtl. nicht korrekt mit dem neuen Notepad in Windows 11 oder höher.

WinSetRegion "50-0 w200 h250 r40-40", "ahk_class Notepad"

Erstellt eine Ellipse anstelle eines Rechtecks. Dieses Beispiel funktioniert evtl. nicht korrekt mit dem neuen Notepad in Windows 11 oder höher.

WinSetRegion "50-0 w200 h250 E", "ahk_class Notepad"

Erstellt ein nach unten gerichtetes Dreieck. Dieses Beispiel funktioniert evtl. nicht korrekt mit dem neuen Notepad in Windows 11 oder höher.

WinSetRegion "50-0 250-0 150-250", "ahk_class Notepad"

Stellt den originalen/normalen Anzeigebereich des Fensters wieder her. Dieses Beispiel funktioniert evtl. nicht korrekt mit dem neuen Notepad in Windows 11 oder höher.

WinSetRegion , "ahk_class Notepad"

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". Dieses Beispiel funktioniert evtl. nicht korrekt mit dem neuen Notepad in Windows 11 oder höher.

WinSetRegion "0-0 300-0 300-300 0-300 0-0   100-100 200-100 200-200 100-200 100-100", "ahk_class Notepad"