WinSetRegion

指定されたウィンドウの形状を、指定された矩形、楕円、多角形のいずれかに変更します。

WinSetRegion Options, WinTitle, WinText, ExcludeTitle, ExcludeText

パラメータ

Options

型:文字列

空白または省略された場合、ウィンドウは元の/デフォルトの表示領域に戻される。Otherwise, specify one or more of the following options, each separated from the others with space(s):

Wn:矩形または楕円の幅。事例:w200

Hn:矩形または楕円の高さ。事例:h200

X-Y:それぞれX/Y座標のペア。例えば、200-0は、X座標に200、Y座標に0を使う。

E:領域を矩形ではなく楕円にする。このオプションは、Wと Hが存在する場合にのみ有効である。

Rw-h:領域を角を丸めた長方形にする。例えば、r30-30は、各コーナーに30x30の楕円を使用する。w-hが省略された場合は、30-30が使用される。Rは、Wと Hが存在する場合にのみ有効である。

矩形または楕円: Wと Hのオプションがある場合、新しい表示領域は、最初の(そして唯一の)X-Y座標の組で指定された左上隅を持つ矩形になります。ただし、Eオプションも存在する場合、新しい表示領域は矩形ではなく楕円になる。事例:WinSetRegion "50-0 w200 h250 E"

多角形: Wと Hのオプションがない場合、新しい表示領域は、複数のX-Y座標のペアによって決定される多角形になります(各座標のペアは、ウィンドウの左上隅からの相対的なウィンドウ内の点です)。例えば、3組の座標が指定された場合、ほとんどの場合、新しい表示領域は三角形になる。互いに対する座標ペアの順番が重要な場合もある。さらに、多角形の領域を決定するために、交互法の代わりに巻線法を使用するために、Optionsに単語Windが存在するかもしれない。

WinTitle, WinText, ExcludeTitle, ExcludeText

型:文字列整数またはオブジェクト

もしこれらの項目が未設定または省略されたときは、最後に見つかったウィンドウが使用されます。そうでないときは、WinTitleウィンドウタイトルまたはターゲットウィンドウを識別するための他の基準、および/またはWinTextにターゲットウィンドウの単一のテキスト要素からの部分文字列(付属のWindow Spyユーティリティを使えばわかります)を指定します。

ExcludeTitleExcludeTextはウィンドウのタイトルまたはテキストで除外するために使用します。指定の仕方はWinTitleWinTextに似ていますが、ExcludeTitleはウィンドウのタイトル以外の基準(ウィンドウクラスやHWNDなど)を認識しません。

ウィンドウのタイトルとテキストは大文字と小文字を区別します。DetectHiddenWindows関数 と DetectHiddenText関数で変更しない限り、初期設定では非表示ウィンドウは検出されず、非表示テキストは検出されます。SetTitleMatchMode関数で変更しない限り、初期設定ではウィンドウのタイトルはその中のどこかにWinTitleまたはExcludeTitleを含んでいれば一致します。

エラー処理

ウィンドウが見つからないときは、TargetErrorがスローされます。

1つ以上のオプションが無効な場合、または2000組以上の座標が指定された場合、ValueErrorがスローされます。

指定された領域が無効であったり、ターゲットウィンドウに適用できなかったりすると、OSErrorがスローされる。

備考

マウスカーソルの下にあるウィンドウのIDは、MouseGetPos関数で取得できます。

スクリプトが所有するウィンドウに領域が設定されると、システムはウィンドウのフレームをレンダリングするために使用する方法を自動的に変更し、それによってウィンドウの外観を変更することがあります。効果は以下に示す回避策#2と似ているが、ウィンドウの領域がリセットされるまでしか影響しない。

既知の制限事項:ウィンドウにキャプション(タイトルバー)があり、システムでデスクトップ合成が有効になっている場合、スクリプトが所有していないウィンドウに領域を設定すると、予期しない結果になることがあります。This is because the visible frame is not actually part of the window, but rendered by a separate system process known as Desktop Window Manager (DWM). なお、Windows 8以降では、デスクトップ合成は常に有効になっている。以下の2つの回避策のいずれかを使用することができる:

; #1: Remove the window's caption.
WinSetStyle "-0xC00000", "Window Title"

; To undo it:
WinSetStyle "+0xC00000", "Window Title"
; #2: Disable DWM rendering of the window's frame.
DllCall("dwmapi\DwmSetWindowAttribute", "ptr", WinExist("Window Title")
  , "uint", DWMWA_NCRENDERING_POLICY := 2, "int*", DWMNCRP_DISABLED := 1, "uint", 4)
  
; To undo it (this might also cause any set region to be ignored):
DllCall("dwmapi\DwmSetWindowAttribute", "ptr", WinExist("Window Title")
  , "uint", DWMWA_NCRENDERING_POLICY := 2, "int*", DWMNCRP_ENABLED := 2, "uint", 4)

Win関数Control関数

この矩形の外側にあるメモ帳のすべての部分を不可視にする。この例は、Windows11以降の新しいメモ帳ではうまく動作しないかもしれません。

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

上記と同じだが、角が40x40に丸くなっている。この例は、Windows11以降の新しいメモ帳ではうまく動作しないかもしれません。

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

矩形の代わりに楕円を作成する。この例は、Windows11以降の新しいメモ帳ではうまく動作しないかもしれません。

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

頂点を下に向けた三角形を作る。この例は、Windows11以降の新しいメモ帳ではうまく動作しないかもしれません。

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

ウィンドウを元の/デフォルトの表示領域に戻す。この例は、Windows11以降の新しいメモ帳ではうまく動作しないかもしれません。

WinSetRegion , "ahk_class Notepad"

メモ帳(または他のウィンドウ)の内側にシースルーの長方形の穴を作成します。以下の2つの長方形がある:外側と内側。各矩形は5組のX/Y座標で構成されるが、これは最初の組が各矩形を "閉じる"ために最後に繰り返されるからである。この例は、Windows11以降の新しいメモ帳ではうまく動作しないかもしれません。

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