2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[AutoHotKey]ウィンドウを近い方に端寄せする関数(はみ出しも対応)

Last updated at Posted at 2018-06-15

動機

  • 右とか左とかじゃなくとりあえずピタっとしてほしい時がある
  • ウィンドウサイズを変数するスクリプトとかで、はみ出したら端寄せもしてほしい

実装

とりあえず、ウィンドウがスクリーンよりでかくなってる場合は考えない。
(考える場合は、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

本当はツールタスクバーの位置や表示有無での判定も入れるべきなのだが、自分は下固定なので諦めました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?