ruby -r win32ole -e 'puts WIN32OLE_TYPE.progids'で、WIN32OLEを使えるプログラム一覧が出てくる。僕のPCで大体5500個ほど出てきた。
んで、これはプログラムIDだかなんだかでソートされてるやつっぽいから、ちゃんと人間がわかるようにアルファベット順に並び替えて違うファイルに書き出したい。いや別に上書きでもいいんだけど。
class Dogsこれで、win32.txtの中にあるやつをアルファベット順にしてwin32_out.txtの中に書き出せた。バンザーイ。
infile = open("C:\\win32.txt")
all = infile.readlines
infile.close
foo = File.open("C:\\win32_out.txt","w")
foo.puts all.sort
foo.close
end
Arrayオブジェクトのsortメソッドを使ったら、配列の中身が一気に指定された順に書き換えられるのかと思ってたから、ちょっとそこで10分ほど止まった。sortしても配列自体が書き換わるわけではないのな。
これを確認した上でさらに改良。
require 'win32ole'で、それぞれのCOMオブジェクトのメソッド一覧が出てくる・・・のだが、5500個のリストのさらに各メソッドの数となると膨大なのでめちゃくちゃ時間がかかる。まあ、5500個全てが有効なのかというとそういうわけではないけど。
infile = open("C:\\win32.txt")
all = infile.readlines
all = all.sort
infile.close
fo = File.open("C:\\win32_methods.txt","w")
all.each do |param|
begin
p param.chomp
fo.puts "【"+param.chomp+"】"
ie = WIN32OLE.new(param.chomp)
me = ie.ole_methods
me.each do |pam|
fo.puts pam +"\\n"
end
i = i+1
rescue
p "error"
end
end
fo.close
っていうか、エラーにならないのに処理がストップする謎の現象が起きたので、そのオブジェクトだけ避けるunless文を逐一追加して回避してたんだけど、プリンタは立ち上がるは変なアラートは出るわでほぼフリーズ状態になってきたのでこの処理は中断することに。
仕方ないからよく使うアプリケーションをあらかじめ指定した上で遊んでみることにする。