原です。

>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 をどう扱ったらいいでしょう。