スタートアップに登録したプログラムは通常ログインした直後に実行されます。
しかし、プログラムの起動順序が決まっている場合など、何らかの条件を満たした後に実行したい場合があります。
Rubyを使い、それらの要求に柔軟に対応する方法を紹介します。
まず、Rubyから外部のプログラムを非同期に実行するには次のようにします。
require "win32ole"
shell = WIN32OLE.new("WScript.Shell")
shell.Run('"C:\Program Files\example.exe"') IO.popen などで外部プログラムを起動した場合は、標準出力をRubyスクリプトに接続してしまうため、問題が生じることがあります。
幾つかのプログラムを順番に実行したい場合には、次のように間に適切なスリープを入れます。
require "win32ole"
shell = WIN32OLE.new("WScript.Shell")
shell.Run('"C:\Program Files\example1.exe"')
sleep(5) # 5秒スリープ
shell.Run('"C:\Program Files\example2.exe"')
スクリプトの先頭でスリープさせることで、ログインから一定時間経過後に起動させることもできます。
sleep(60) # 一分間スリープ
require "win32ole" shell = WIN32OLE.new("WScript.Shell")
shell.Run('"C:\Program Files\example1.exe"')
sleep(5) # 5秒スリープ
shell.Run('"C:\Program Files\example2.exe"')
「TrueCryptでZドライブがマウントされたら起動する」という条件であっても、Rubyを使えば次のように実現できます。
require "win32ole"
shell = WIN32OLE.new("WScript.Shell")
loop do if File.exists?("Z:\") sleep(3) shell.Run('"C:\Program Files (x86)\PuTTY\pageant.exe" "Z:\keys\id_rsa.ppk"') shell.Run('"Z:\PT2\TvRock\tvrock.exe"') break end
sleep(5)
end
スクリプトを準備できたらスタートアップフォルダに保存し、ログイン後に実行されるようにします。
このとき拡張子を .rbw として保存すると、プロンプトを開かずにスクリプトが実行されます。
Rubyスクリプトを実行するにはあらかじめRubyをインストールしておく必要があります。
http://www.ruby-lang.org/ja/downloads/#label-1
[amazon asin="4756136036" /]