2008-01-05

辞書その2

光明が見えた方向に進んでみたが、辿り着いた場所には扉があったものの、それは固く閉ざされていた...


って感じですか。

辞書.appの検索入力をフックできればいいんとちゃいますか。

いくつか方法があると思いますが、まずは、気になっていたRubyInjectで。

machレベルで関数上書きすると。最近はtext segmentが書き込み禁止にされてしまって寂しいですが、それはそれとしてインストールしてみます。

$ xcodebuild SYMROOT=/tmp
$ cp -r /tmp/Release/RubyInject.framework /Library/Frameworks


でもって、Dictionary.app起動してpsとかでプロセスIDを調べて

sudo ruby inject.rb プロセスID


とすると irb が起動して、いろいろできます。


辞書.appの右上のNSTextFieldっぽいところの文字列を引っこ抜ければよいと思うので探してみます。

require 'osx/cocoa'
include OSX
def walk(d)
instance = d[1]
NSLog d[0]
NSLog instance.class.to_s
begin
NSLog instance.stringValue.to_s
rescue
end
NSLog " "
begin
instance.subviews.count.times do |i|
walk [d[0] + ".subviews[#{i}]", instance.subviews[i]]
end
rescue
end
end

NSApp.windows.count.times do |i|
walk ["NSApp.windows[#{i}].contentView", NSApp.windows[i].contentView]
end


環境設定ウィンドウの文字列と同じものを見つけたので、setStringValue したら書き換えることができました!

しかし、右上のNSTextFieldらしきのにはどうも辿り着けない。うーん。