GIMPのテキストボックスを有効にするには結構めんどくさくて、例えば文字の位置を直してから文字を書き直したりサイズを変更したりを繰り返すと手間がかかる。
テキストモードにしてテキストボックスをクリックしてさらに文字を全角にしなければならない。テキストボックスを移動する際も文字の上をクリックしなければ文字移動できず面倒。
かなりの手間なので自動化してみたのだけど、結構躓いたので詳細をメモ。
キーマクロソフト比較
今回uwscを使ったがuwscは検索によると作者さんがお亡くなりになっており、今後windowsアップデートで突然使えなくなる可能性もあるので他の方法を探してみたがそれも非常に面倒だった。
autohotkey
全角半角の分岐は正しく判断できたものの、GIMPへのキー入力が入ったりはいらなかったりする現象が起きた。
mkmacro
そもそもウィンドウを指定しての入力ができなかった(アクティブなウィンドウの名前を取得後でウィンドウをアクティブにすることは可能)。それに作者さんからそろそろ更新をやめるかもというお知らせもあった。
HiMacroEX
ウィンドウを有効にする方法はあるがなぜかGIMPのウィンドウをアクティブにすることができなかった。
Pulover’s Macro Creator
使いやすいがそもそもautohotkeyをベースに作られているのでautohotkeyと結果は同じ。
autoit
全角半角キーを押すのが面倒である様子。
uwscr
uwscを再現しようとしているソフト。まだ実装されてないコマンドもあるが過去に作ったuwsファイルがそのまま使えるのはすごい。
ClickerAce
非常に簡単にマクロが作れる。ウィンドウを指定してキーマクロができる。ただし単一のソフトのみの指定になる。小さく常駐する機能がないため他のマクロと組み合わせづらい。
pyautogui
pythonの習熟が必要。ウィンドウを指定して入力ができないがアクティブなウィンドウ名を詳細に指定できる。
exe化すると遅いので.pywとして起動するのが良さげ。
後日自作した経緯を別で書く。
結論
UWSCがつかえなくなった場合autohotkeyで判断させ分岐後は別のマクロソフトのファイルでキー入力させるというまどろっこしい手段を使わなければならない。
pythonでexeファイルを作り込むのも手だが完全に個人用になってしまう。
注:GIMPのテキストボックスの移動を楽にする方法
「ツールオプション」→移動対象「レイヤー」→「アクティブレイヤーを移動」にすると透明部分をクリックしても移動ができるようになる。
UWSC
UWSCではTGL_IMEで半角か全角か判断がつくはずなんだがうまくいかなかった。
毎回半角の方にしか分岐してくれなかった。
注:キーボードショートカットで「キャンバスのテキスト編集」をCTRL+Rに設定してある
ID = GETID("GIMP","gdkWindowToplevel",-1) CTRLWIN(ID,NORMAL) MOUSEORG(ID, 2) IFB GETKEYSTATE(TGL_IME)=TRUE THEN //全角ひらがなの場合 SCKEY(ID,VK_ESC) SCKEY(ID,VK_KANJI) SCKEY(ID,VK_T) SCKEY(ID,VK_CTRL,VK_R) SCKEY(ID,VK_KANJI) MSGBOX("zennkaku") ELSE THEN //半角英数の場合 SCKEY(ID,VK_ESC) SCKEY(ID,VK_T) SCKEY(ID,VK_CTRL,VK_R) SCKEY(ID,VK_KANJI) MSGBOX(GETKEYSTATE(TGL_IME)) ENDIF ACW(ID)
最終的に全角半角の判断はあきらめて現在の入力方法が全角だろうが半角だろうがすべからくIMEのショートカットキーで半角英数にしてからGIMPを操作してその後全角にするという手順にした。
注:IMEショートカットキーはCRTL+F10→N→Fかshifi+無変換
shift+無変換のショートカットキー確認方法:IMEの文字アイコン右クリック→プロパティ→詳細設定→全般タブの→編集操作→使用しているIMEを選ぶ→変更)
ID = GETID("GIMP","gdkWindowToplevel",-1) CTRLWIN(ID,NORMAL) MOUSEORG(ID, 2) SCKEY(ID,VK_ESC) //ctrl+F10→N→Fの場合 //SCKEY(ID,VK_CTRL,VK_F10) //SLEEP(0.1) //SCKEY(ID,VK_N) //SCKEY(ID,VK_F) //shift+無変換の場合 SCKEY(ID,VK_SHIFT,VK_NONCONVERT) SCKEY(ID,VK_T) SCKEY(ID,VK_CTRL,VK_R) SCKEY(ID,VK_KANJI) ACW(ID)
autohotkey
半角全角の判断はできたがGIMP側にキー入力を流し込むことができなかった。
ウィンドウはアクティブにできたので他のマクロソフトと組み合わせるしか方法がない。
titile一部一致指定では画像ウィンドウがアクティブにならずid指定でようやくウィンドがアクティブになった。なかった。
#WinActivateForce SetTitleMatchMode, 2 WinGet,gimp_id,, – GIMP WinActivate,ahk_id %gimp_id% While IfWinNOTActive,ahk_id %gimp_id% { } Gosub, IMEGetstate If (vimestate=1) ;全角ひらがなの場合 { ControlSend,,{Esc},ahk_id %gimp_id% Send,{vkF3} ControlSend,,t,ahk_id %gimp_id% ControlSend,,^r,ahk_id %gimp_id% Send,{vkF3} } else if (vimestate=0) ;半角英数の場合 { ControlSend,,{Esc},ahk_id %gimp_id% ControlSend,,t,ahk_id %gimp_id% ControlSend,,^r,ahk_id %gimp_id% Send,{vkF3} } WinActivate,ahk_id %gimp_id% return IMEGetstate: SetTitleMatchMode, 2 WinGet, vcurrentwindow,, – GIMP vimestate := DllCall("user32.dll\SendMessageA", "UInt", DllCall("imm32.dll\ImmGetDefaultIMEWnd", "Uint", vcurrentwindow), "UInt", 0x0283, "Int", 0x0005, "Int", 0) return
つ、つかれた・・・。