原です。 >artonです。 >できるようにすることは可能なので、パッチを作ってテストしてみました。 >問題なさそうだったので助田さんに取り込んでいただけるようお願いました。 >原さんが試されるのでしたら添付のパッチをwin32ole.cに適用してみてください。 >リリース版のruby-1.8.1/ext/win32ole/win32ole.c 用です。 ありがとうございます。すごい。 クリップボードに文字列がコピーされた瞬間に自動的に辞書を引きに行くスク リプトを書いてみました。 -----^ test-clip.rb #require 'win32ole' class EventReceiver def initialize(ie) @ie = ie end def call(*arg) Thread.start do @ie.navigate("http://www.sanseido.net/") # @ie.document.parentWindow.navigate("http://www.sanseido.net/") # w = @ie.document.parentWindow.open("http://www.sanseido.net/") sleep 0.1 until @ie.readystate == 4 sleep 1.35 d = @ie.document s = d.parentWindow.clipboardData.getData("Text") puts "clipboard: #{s}" d.getElementById("TWords").innerText = s d.getElementById("submit1").click end end end ie = WIN32OLE.new('InternetExplorer.Application') ie.visible = true url = ARGV.shift ie.navigate(url) sleep 0.1 until ie.readystate == 4 begin rcv = EventReceiver.new(ie) ie.document.body.attachEvent('oncopy', rcv) ev = WIN32OLE_EVENT.new(ie, 'DWebBrowserEvents') ev.on_event("Quit") {|*args| throw :done} catch(:done) { loop { WIN32OLE_EVENT.message_loop sleep 0.246 } } ensure ie.quit end -----$ test-clip.rb 使い方は、まず arton さんの http://arton.no-ip.info/data/win32ole.zip を取ってきて、win32ole.so をカレントディレクトリに置き、 mswin32 版の ruby で ruby -r ./win32ole test-clip.rb http://www.ruby-lang.org/ とし、適当な文字列をクリップボードにコピーします。 ...... ちょっと ruby そのものの話から外れるかもしれないですが、4月からの独立 法人化に伴い、これを exerb で固めて売って儲けて家を建てるので、もう少 し質問させて下さい。 * sleep 0.246 がないと、CPU 使用率が 100% になってしまうみたいです。 こんなふうにループで sleep を入れて対処していいですかね。event を 取りこぼすことはない? * def call でスレッドを起こしていますが、これをしないと三省堂へ 飛んで行かないのですが解せないです。call はすぐ return しない といけない、という事はあるんしょうか。 * その後 sleep 1.35 しないと文字列をペーストしてくれません。 readystate == 4 ではまだ不十分なのかな。 * @ie を定数 IE にすると(あらかじめ IE にはアプリケーションを代入 しておく)、sleep がいらなくなったりする、、、変だなあ。 と、自分が何が分からないのか分からないのですが(WIN32OLE と COM と VBScript と DOM と DHTML の区別がついていない気がしますが)、 更に質問: * ie.document.body.attachEvent('oncopy', rcv) のところを ie.document.attachEvent('oncopy', rcv) にするとイベントを 拾えないのはなぜ。 * @ie.navigate("http://www.sanseido.net/") のところを @ie.document.parentWindow.navigate("http://www.sanseido.net/") にするとうまくいかない。(WindowsXPで。Windows2000 では OK。) なぜ。 * 検索画面を別ウインドウに起こしたくて w = @ie.document.parentWindow.open("http://www.sanseido.net/") とたのだけど、w をどう扱ったらいいでしょう。