0
0

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 3 years have passed since last update.

[AutoHotKey]ウィンドウをドラッグして画面からはみ出したら端寄せする

Last updated at Posted at 2020-05-21

↑の続編的な。

まだ開発中。

動機

  • MagnetWindowを使っていたが、Chromeに対して機能しなかった
  • ウィンドウ同士は適当に重ねる派なので、とりあえず画面端にだけピタっとしてくれ

実装

ドラッグ移動の判定

とりあえず、単純にマウス左ボタンを長押しした場合とする。
本当はウィンドウ移動の有無も判定したほうがいいけど。

SnapWindow.ahk
; ウィンドウドラッグ時にはみ出していたら端寄せ
~LButton::Return ; A_TimeSincePriorHotkeyを取るためだけ
LButton up::
    ; 修飾キー付きを排除
    ; クリックを排除
    If (A_PriorHotKey = "~LButton" and A_TimeSincePriorHotkey > 300)
    {
        SnapWindow()
    }
    Return

; ウィンドウがはみ出していたら端寄せする関数
; 現状、タスクバーが下にある場合のみ対応
SnapWindow()
{
    WinGetPos, , , , tbHeight, ahk_class Shell_TrayWnd ; タスクバーの高さ取得
    WinGetPos, VarX, VarY, AW, AH, A
    If (VarY < 0)
        DestY = 0
    Else If (VarY > (A_ScreenHeight - tbHeight - AH))
        DestY := A_ScreenHeight - AH - tbHeight + 2 ; ちょい浮くので 2 下に調整
    If (VarX < 0)
        DestX = 0
    Else If ((VarX + AW) > A_ScreenWidth)
        DestX := (A_ScreenWidth - AW)
    WinMove, A, , %DestX%, %DestY%
}

ドラッグ移動で発動ということは、離したタイミングで発動なので、Upホットキーということになる。

長押し判定は、A_TimeSincePriorHotkeyがnミリ秒以上という形で行うことができる。

A_TimeSincePriorHotkeyは、A_PriorHotkey(直近で発動したホットキー、ホットキーラベル内では「今回のそれ自体」は除く)からの経過時間が格納される組み込み変数。
左ボタンのUpホットキーなので、A_PriorHotkeyが左ボタンの押下であり、かつA_TimeSincePriorHotkeyがある程度長ければ、左ボタンの長押しだと判断できる。
(厳密には、その間にカーソルが一定以上の距離を移動しているかも評価したほうがよいが、とりあえず省く)

ここで困るのが、A_PriorKey(直近で入力されたキー)からの経過時間が格納される組み込み変数はないということ。
つまり、左ボタン押下がホットキーとしてスクリプトに登録されていなければ、ホールド時間の取りようがないということになる。

よって、~LButton::Returnが必要になるというわけ。
別に*LButton::Send, {Blind}{LButton}とかでもいいっちゃいいのだが、チルダで入力を通す場合、他のLButtonを使うホットキーラベルと共存できるのがメリットとなる。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?