blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

AutoHotkey から他のプログラムを実行し、その結果を利用する

先日言及した StdoutToVar_CreateProcess 関数を使用すると*1、表題のようなことができる。以下に例を示そう。まず、rubyclisp でそれぞれ 1000 の階乗(1000!)を求める。そして、その結果を、 AutoHotkey のスクリプト内の sOutput 変数に取り込んでから MsgBox コマンドを使って表示する。

; ruby
; nの階乗を求めるプログラムを1行で - gan2 の Ruby 勉強日記
; http://d.hatena.ne.jp/gan2/20071004/1191514166
rb_src := "def fact(n) (1..n).to_a.inject(1){|r, i| r * i} end; p fact(1000)"
sOutput := StdoutToVar_CreateProcess("ruby -e '" . rb_src . "'")
MsgBox % sOutput
; clisp
cl_src := "(defun fact(n &optional (a 1)) (if (= n 1) (return-from fact a)) (fact (1- n) (* n a))) (fact 1000)"
sOutput := StdoutToVar_CreateProcess("clisp -x -q '" . cl_src . "'")
MsgBox % sOutput

このように、複雑な処理を AutoHotkey 外で行いその結果を AutoHotkey に取り込む、といったことができる。