動機
ホットキーでスクリーンショットを撮った後、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
のあとに書く。
ホットキーでは別のスレッドが作成されるため、変数やパラメータの内容が引き継がれない。よって、グローバル変数に格納しておく必要がある。