LoginSignup
1
1

More than 5 years have passed since last update.

[AutoHotKey]関数内で動的ホットキーを定義する

Posted at

動機

ホットキーでスクリーンショットを撮った後、TwitterとかImgurとか投稿先を選びたい。

実装

とりあえず、保存した画像ファイルをSplashImageでいい感じに表示する。

その後、TwitterならTキーとかのホットキーを動的に定義する。

ahk
HoldImage(img,length)
{
    ; 画像サイズを取得
    ; https://autohotkey.com/board/topic/12001-finding-the-widthheight-of-a-picture/
    gui,add,picture,hwndmypic,%img%
    controlgetpos,,,width,height,,ahk_id %mypic%
    if (width > height)
    {
        zH = -1
        zW = %length%
        zX = 0
        ZY := (length - (height * (length / width))) / 2
    }
    Else
    {
        zH = %length%
        zW = -1
        zX := (length - (width * (length / height))) / 2
        ZY = 0
    }
    ; テキストによるズレを吸収するため、ウィンドウ高さの指定はなし
    SplashImage, %img%, ABM2 W%length% X0 Y0 ZH%zH% ZW%zW% ZX%zX% CWBlack CTWhite, , T: Tweet`ni: Imgur`nEsc: Cancel, , Cica
    global imgfile := img ; パラメータをグローバル変数に格納する
    Hotkey, t, Tweet, On
    Hotkey, i, Imgur, On
    Hotkey, Esc, Cancel, On
    Return ; 関数コール時に実行されるのはここまで
    Tweet:
        Tweet(imgfile)
        Hotkey, t, Off
        Hotkey, i, Off
        Hotkey, Esc, Cancel, Off
        SplashImage, Off
        Return
    Imgur:
        Imgur(imgfile)
        Hotkey, t, Off
        Hotkey, i, Off
        Hotkey, Esc, Cancel, Off
        SplashImage, Off
        Return
    Cancel:
        Hotkey, t, Off
        Hotkey, i, Off
        Hotkey, Esc, Cancel, Off
        SplashImage, Off
        Return
}

Tweet()関数とImgur()関数は別途定義してあると思いねえ。

定義先のラベルは、関数外に置いてもよい。関数内に書く場合、ホットキー入力を待たずに実行されないよう、Returnのあとに書く。

ホットキーでは別のスレッドが作成されるため、変数やパラメータの内容が引き継がれない。よって、グローバル変数に格納しておく必要がある。

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