hirax.net::inside out::2010年01月18日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2009年12月 を読む << 2010年1月 を読む >> 2010年2月 を読む

2010-01-18[n年前へ]

アプリケーション間を繋ぐRubyスクリプトを作るには? 

 Windows上で動くアプリケーション間を繋ぎたい、と思うことがあります。そんな例のひとつが、たとえば、こんなものになります。
 それは、ハードウェアに繋がれたログファイルを定期的に吐き出すアプリケーションがあり、そのハードウェアの状況に応じて、他の制御アプリケーションを通じて他のハードウェアを制御したい、というような場合です。

 そんな時、Rubyでこんな具合のスクリプトを組み、対応してしまうことがあります。hoge.txtは、「ハードウェアに繋がれたログファイルを定期的に吐き出すアプリケーション」が刻々出力を行っている「ログファイル」です。

require 'win32GuiTest'

open("hoge.txt", "r") do |f|
  data=f.readlines[f.readlines.length-1]
  message=$1 if /^hoge:(.+)$/=~data
  @gui.sendKeys(message+'{ENTER}',1)    
end
 つまり、ログファイルの最後の行を読み込み、その出力結果を用いた何かの処理を行い、SendKeys(Win32guitest)で他の(異なる・あるいは同じハードウェアを制御するための)アプリケーションを操作する、という具合です。ここでは、単純のために、捜査対象ウィンドウを最前面に持ってきたり・フォーカスさせる、といった部分は端折っていますが、こんな「その場対応スクリプト」を書いてしまうことがあります。そんな風に対応せざるを得なかったりすることもあります。

 ログファイルを出力できないアプリケーション1と、それと全く無関係の、他のアプリケーション2を繋ぐ場合には、どうすれば良いのでしょう。アプリケーション1のウィンドウを監視する・ウィンドウに対するメッセージをフックする、といったことをすれば良いのでしょうか・・・?