2017/03/02(木) [n年前の日記]
#1 [autohotkey] AutoHotkeyでマウスボタンの状態を画像表示
こんな感じかな…と…。
_picture_display_01.ahk
動作に必要な画像は以下。CC0 / Public Domainってことで。
_mouseicon_000.png
_mouseicon_001.png
_mouseicon_002.png
_mouseicon_003.png
動作に必要ではないけれど、元にしたsvg画像もzipで置いておくです。
_mouseicon_svg.zip
こんな感じの結果に。
終了は、ALt+Q を押すか、タスクトレイのアイコンを右クリックしてExitを選択。
_picture_display_01.ahk
; picture display test ; ; use AutoHotKey v1.1.24.05 appliname=picture_display_01 appliver=0.0.1 wtitle=%appliname% %appliver% ; 0 is transparent. 255 is opaque transparentv=210 bgcol=336699 fgcol=FFFFFF fontsize=32 fontweight=700 ; Window init ; Gui, +Owner +AlwaysOnTop +Resize -SysMenu -MinimizeBox -MaximizeBox -Disabled -Caption -Border +ToolWindow Gui, +Owner +AlwaysOnTop +Resize Gui, Margin, 8, 0 Gui, Color, %bgcol% cdir=%A_ScriptDir% opt=X0 Y0 AltSubmit BackgroundTrans Gui, Add, Picture, %opt% vIconBas, %cdir%\mouseicon_000.png Gui, Add, Picture, %opt% vIconLMB, %cdir%\mouseicon_001.png Gui, Add, Picture, %opt% vIconMMB, %cdir%\mouseicon_002.png Gui, Add, Picture, %opt% vIconRMB, %cdir%\mouseicon_003.png Gui, Font, C%fgcol% S%fontsize% W%fontweight% Q2, Arial Gui, Add, Text, x+0 yp+0 Vbtnstext, Alt+Q ... Exit Gui, Show, NoActivate, %wtitle% WinSet, Transparent, %transparentv%, %wtitle% ; GuiControl, , btnstext, GuiControl, Hide, IconLMB GuiControl, Hide, IconMMB GuiControl, Hide, IconRMB ; work init btnslist := Object("LButton", "IconLMB", "MButton", "IconMMB", "RButton", "IconRMB") nowstate := Object() oldstate := Object() For k, v in btnslist { nowstate.Insert(k, 0) oldstate.Insert(k, 0) } Loop { ; check status of mouse button For k, v in btnslist { oldstate[k] := nowstate[k] GetKeyState, s, %k% nowstate[k] := s="D" ? 1 : 0 If (nowstate[k] + oldstate[k]) <> 1 Continue If nowstate[k]<>0 { ; pushed button GuiControl, Show, %v% GuiControl, , btnstext, %k% On } Else { ; released button GuiControl, Hide, %v% GuiControl, , btnstext, %k% Off } } Sleep, 16 ; 60 FPS } EXIT: GuiClose: ExitApp ~!Q Up:: ; Alt + Q ... Exit ExitApp
動作に必要な画像は以下。CC0 / Public Domainってことで。
_mouseicon_000.png
_mouseicon_001.png
_mouseicon_002.png
_mouseicon_003.png
動作に必要ではないけれど、元にしたsvg画像もzipで置いておくです。
_mouseicon_svg.zip
こんな感じの結果に。
終了は、ALt+Q を押すか、タスクトレイのアイコンを右クリックしてExitを選択。
◎ 補足説明。 :
ずっと無限ループさせてるけど、何もwaitを入れなかったらマウスボタンを押した際に処理待ち?のアイコンが出てしまって少し困ったり。60 FPS程度で回ることを期待して Sleep, 16 を入れてみたら出にくくなった。ちなみに Slepp に指定する数値の単位はms(ミリ秒)。
_Sleep - AutoHotkey Wiki
また、ループするたびに画像の表示/非表示を設定すると該当部分がチラチラしてしまった。ボタンの状態に変化があった時だけ表示/非表示を変更する、みたいなソースにしておかないと表示が見苦しくなるなと。
ボタンの押し下げ状態は、GetKeyState で取得できる。
_GetKeyState - AutoHotkey Wiki
画像の表示は Gui, Add, Picture, を使うけど。表示した画像の表示/非表示の切り替えは、GuiControl, Show, xxxx や GuiControl, Hide, xxxx でいいらしい。対象を指定する xxxx の部分は、Gui, Add, Picture, Vxxxx , 画像ファイル名、と言った形で指定しておく。「v」「V」のどっちを書いたらいいのかは、よく分からない。大文字小文字は区別するのか、区別しないのか…。こういうところにも微かなトラップ臭が。
_Sleep - AutoHotkey Wiki
また、ループするたびに画像の表示/非表示を設定すると該当部分がチラチラしてしまった。ボタンの状態に変化があった時だけ表示/非表示を変更する、みたいなソースにしておかないと表示が見苦しくなるなと。
ボタンの押し下げ状態は、GetKeyState で取得できる。
GetKeyState, 変数, ボタンやキー種類という形で書く。キー種類の後ろに「, P」もつけられるけど、「P」をつけるとキーカスタマイズソフトの類がキー割り当てを変更してしまう前の状態を返してくるので…。例えば、キー操作・ボタン操作を表示したい、といった場合は「P」をつけないほうが目的を果たせる気もする。要は、とにかく「P」をつけとけばいいのだ、というわけでもなさそうだよ、と。
_GetKeyState - AutoHotkey Wiki
画像の表示は Gui, Add, Picture, を使うけど。表示した画像の表示/非表示の切り替えは、GuiControl, Show, xxxx や GuiControl, Hide, xxxx でいいらしい。対象を指定する xxxx の部分は、Gui, Add, Picture, Vxxxx , 画像ファイル名、と言った形で指定しておく。「v」「V」のどっちを書いたらいいのかは、よく分からない。大文字小文字は区別するのか、区別しないのか…。こういうところにも微かなトラップ臭が。
[ ツッコむ ]
以上です。