« 直ったかも | トップページ | 少しずつ »

2024年5月26日 (日)

AutoHotkeyで、処理関数を変数で渡して実行したい

朝は、ちょっと雲があったけれど、晴れで、昨日同様、夏を思わせる陽気。

ちょっとムシッとしていた。

 

AutoHotkeyを使っていて、ほぼ同じような処理をしているけれど、実行したい処理関数が違ったり、実行回数が違うので、関数の共有化が出来ないでいた。

ほぼ同じ処理の長目の関数が、複数存在していて、どうにかならないか、と思っていた。

AutoHotkeyで、処理関数を変数で渡して実行したい!

ということで、調べてみることにした。

まずは、AIに尋ねてみた。

ChatGPT、Copilot、Gemini、Perplexity AI、どれも、残念ながら、大外れ。

「Eval」「Call」「Func」「Run」「Exec」「%実行処理を代入した変数%」とか出してくれたけれど、どれもダメ。

他の言語だったら、Evalを使って実行出来たりするので、これかな、なんて思ったりもしたけれど。

ここまで大外れなのは、珍しい。
一つくらいは、それなりの回答をしてくれるAIがあるのに。

ネットで調べてみても、調べ方が悪いのか、事例が出てこない。

多分、ChatGPTが出したv1のコードだったと思うけれど、それを、v2に変換したものを何気に見ていた。

GitHub - mmikeww/AHK-v2-script-converter: AHK v1 -> v2 script converter

;v1
; 変数にSendコマンドを格納する
mySend := Func("Send")

; 実行するキーストロークを指定
keysToSend := "#s"

; 変数に格納したSendコマンドを実行する
%mySend%(keysToSend)

;v2
; 変数にSendコマンドを格納する
mySend := Send

; 実行するキーストロークを指定
keysToSend := "#s"

; 変数に格納したSendコマンドを実行する
%mySend%(keysToSend)

よーく見ると、一つ違っている。

v2の方は、ダブルコーテーションを使わないで、処理関数そのものを変数に代入している。

そのまま変数に代入なんて出来るの?と思いながら、試しに、「mySend(keysToSend)」で実行してみると...

ビンゴ!

なんと、v2では、特に何か関数をかまさなくても、そのままでいいようだ。

これが出来るなら、配列や2次元配列に入れても出来るかな?と思ってやってみたら、出来た!

以下、事例。

;変数の場合
myAction := Send
myValue := "#s"
myAction(myValue)  ; → Send("#s")

;配列の場合
myArray := [SendText, "OKOK"]
myArray[1](myArray[2])  ;→ SendText("OKOK")

;2次元配列の場合
myArray := [[Send, "{F5}"], [Send, "{Tab 9}", SendText, "Happy", Send, "#s"], [Send, "{F2}"]]
myArray[2][3](myArray[2][4])   ;→ SendText("Happy")

矢印で、実際の処理関数を記述した。
事例なので、処理関数や値には、深い意味はない。

話はずれるけれど、AutoHotkeyって、配列を参照する時、「0」からではなく、「1」からなんだよね。

ほとんどのプログラミング言語では、「0」から参照するけれど、初心者の頃って、なんで?って思いがち。(笑)

でも、プログラミングを進めていくと、なるほどなぁ、と思うのだけれど、AutoHotkeyは、どういう訳か、「1」から参照するようになっている。

何か理由でもあるのだろうか?
初心者の疑問をそのまま体現してくれたのだろうか?(笑)
(AIに聞いてみたら、AutoHotkeyの前身の言語が、「1」から開始していたので、その流れのようだ。)

閑話休題。

と、こういう風にすれば、処理関数を変数に代入して、引き渡した先の関数で実行させることが出来るようになる。

あとは、プログラムの中でルールを設けて、Loopで回して引っ張り出せば、色んな処理関数を、実行回数にしばられることなく実行出来るようになる。

これに気付けたお陰で、関数の共有化が出来、管理がしやすくなったし、簡単に処理も増やすことが可能になった。

よかったよかった。

|

« 直ったかも | トップページ | 少しずつ »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 直ったかも | トップページ | 少しずつ »