動機
- 右とか左とかじゃなくとりあえずピタっとしてほしい時がある
- ウィンドウサイズを変数するスクリプトとかで、はみ出したら端寄せもしてほしい
実装
とりあえず、ウィンドウがスクリーンよりでかくなってる場合は考えない。
(考える場合は、A_screenwidth < AW
とかで分岐したらいい)
左右どっちに近いかは、「左端からの距離」「右端からの距離」それぞれの絶対値を比較する。
sample1.ahk
; ウィンドウを左右近いほうに端寄せする関数
moveToNearSide(){
WinGetPos, AX, , AW, , A
If (av(AX) < av(A_ScreenWidth-(AX+AW)))
WinMove, A, , 0,
Else
WinMove, A, , (A_ScreenWidth - AW),
}
; ウィンドウを上下近いほうに端寄せする関数
moveToNearEnd(){ ; タスクバーが下にある前提
WinGetPos, , AY, , AH, A
WinGetPos, , , , tbHeight, ahk_class Shell_TrayWnd ; タスクバーの高さ取得
If (av(AY) < av(A_ScreenHeight-(AY+AH)))
WinMove, A, , , 0,
Else
WinMove, A, , , (A_ScreenHeight - AH - tbHeight)
}
; 数値を絶対値(AbsoluteValue)に直す関数
AV(Value)
{
If Value > 0
Return, Value
Else
Return, -(Value)
}
ウィンドウがはみ出してるかどうか判定するスクリプト、はこんな感じ。
sample2.ahk
WinGetPos, AX, AY, AW, AH, A
WinGetPos, , , , tbHeight, ahk_class Shell_TrayWnd
If (AX < 0) or (A_ScreenWidth < (AX+AW))
moveToNearSide()
If (AY < 0) or (A_ScreenHeight-tbHeight < (AY+AH))
moveToNearEnd()
Else
MsgBox, , %A_scriptname%, はみだしてません
Exit
本当はツールタスクバーの位置や表示有無での判定も入れるべきなのだが、自分は下固定なので諦めました。