[#39106] What processor do you run ruby on? — "K.Sasada" <ko1@...>

 ささだです。

13 messages 2004/02/09
[#39200] Re: What processor do you run ruby on? — "K.Sasada" <ko1@...> 2004/02/17

"K.Sasada" <ko1@namikilab.tuat.ac.jp> wrote :

[#39207] Re: What processor do you run ruby on? — Isamu KOZUKA <kozuka@...> 2004/02/17

小塚@しなきゃならないテストがいっぱいだ〜....です。

[#39129] InternetExplorer ってインターフェースとして使える? — Shin-ichiro HARA <sinara@...>

原です。

34 messages 2004/02/10
[#39130] Re: InternetExplorer ってインターフェースとして使える? — Yac <yac@...> 2004/02/10

岡です。

[#39136] Re: InternetExplorer ってインターフェースとして使える? — Yac <yac@...> 2004/02/10

岡です。

[#39140] Re: InternetExplorer ってインターフェースとして使える? — arton <artonx@...> 2004/02/11

artonです。別件。

[#39144] Re: InternetExplorer ってインターフェースとして使える? — Shin-ichiro HARA <sinara@...> 2004/02/12

原です。

[#39145] Re: InternetExplorer ってインターフェースとして使える? — arton <artonx@...> 2004/02/12

artonです。

[#39146] Re: InternetExplorer ってインターフェースとして使える? — nobu.nakada@... 2004/02/12

なかだです。

[#39147] Re: InternetExplorer ってインターフェースとして使える? — arton <artonx@...> 2004/02/12

artonです。

[#39150] Re: InternetExplorer ってインターフェースとして使える? — nobu.nakada@... 2004/02/12

なかだです。

[#39151] Re: InternetExplorer ってインターフェースとして使える? — arton <artonx@...> 2004/02/12

artonです。

[#39275] DnD on win32 — Shinichiro HIDA <shinichiro@...>

飛田と申します。

21 messages 2004/02/26
[#39276] Re: DnD on win32 — たむらけんいち <sgs02516@...> 2004/02/26

たむらです。

[#39277] Re: DnD on win32 — Shinichiro HIDA <shinichiro@...> 2004/02/27

飛田です。

[#39278] Re: DnD on win32 — Itou-T15@... 2004/02/27

[#39288] 固有値、固有ベクトルの計算 — Masahiro Sato <msato@...>

19 messages 2004/02/27

[ruby-list:39176] Re: InternetExplorer ってインターフェースとして使える?

From: arton <artonx@...>
Date: 2004-02-13 06:50:26 UTC
List: ruby-list #39176
Tietewさんのruby-list:39175以外の点でわかるものについて

> * sleep 0.246 がないと、CPU 使用率が 100% になってしまうみたいです。
>   こんなふうにループで sleep を入れて対処していいですかね。event を
>   取りこぼすことはない?
キューされるので問題ないです。入れすぎるとカクカクしますが。逆にsleepを
入れずにCPU使用率が100%になってもノートパソコンでスリープさせる必要があ
るといった理由がなければそれほど問題ありません。
#でもそろそろMsgWaitForMultipleObjectsを利用したループにすべきかも。
#ただ、微妙に問題がありしかも問題がないMsgWaitForMultipleObjectsExは
#Windows95には実装されていないとか。

> * def call でスレッドを起こしていますが、これをしないと三省堂へ
>   飛んで行かないのですが解せないです。call はすぐ return しない
>   といけない、という事はあるんしょうか。
IEの実装に依存すると思いますが

IE(main thread) IE(doc thread)                    ruby
                     lock
                       + oncopy ------------------->
                                                   |
                                                   |
          <----------------------------------navigate
          |
      lock wait
となるのではないでしょうか? プロセスあたり(スレッドあたりではなく)のソ
ケット数(プーリングしているのかな?)などが関連しているかも知れません。

> 
> * その後 sleep 1.35 しないと文字列をペーストしてくれません。
>    readystate == 4 ではまだ不十分なのかな。
僕の環境ではうまくいきます(*)。その現象は
@ie.document.parentWindow.navigate("http://www.sanseido.net/")
の行を使われていた場合ではないでしょうか? その場合は再現しました。この時
点では、@ie.readystate == 4で、Navigate呼び出し時点では単に新たなドキュ
メントウィンドウ用のスレッドを起こすだけみたいです。
(*)とは言え、その他の要因もあるかも知れないのであり得るかも知れません

余談:
全然動作しないと思ったら「スクリプトによる貼り付け処理の許可」を禁止して
いるのに影響されていた(IE内部ではなくローカルコンピュータ上にインストー
ルされたプログラムからの操作なのに)。多分セキュリティ的には安全側に倒し
てあるからだという意味では正しいのだろうが(かつ呼び出しの位置透過性もあ
るし)、ちょっと疑問。

> 
> * @ie を定数 IE にすると(あらかじめ IE にはアプリケーションを代入
>   しておく)、sleep がいらなくなったりする、、、変だなあ。
そのくらい定数の検索はインスタンス変数の検索より時間がかかるということだっ
たり。あるいは、その時点では既に@ie.navigate()に変更していたのでは?

> と、自分が何が分からないのか分からないのですが(WIN32OLE と COM と 
> VBScript と DOM と DHTML の区別がついていない気がしますが)、
当のMSですら何が分からないのか分からなくてしょっちゅうパッチを出している
わけですから……

>* 検索画面を別ウインドウに起こしたくて
>  w = @ie.document.parentWindow.open("http://www.sanseido.net/")
>  とたのだけど、w をどう扱ったらいいでしょう。
windowオブジェクトの直接のメソッド(closeなど)は使えますが、たとえば
window.documentを触った瞬間に
    OLE error code:80070005 in <Unknown>
      アクセスが拒否されました。
となります。
0x80070005は微妙なコード(メモリーアクセスバイオレーションとセキュリティ
バイオレショーンの両義がある)ですが、どうもこの場合はセキュリティ制限に
引っ掛かっているように見えます。したがってほとんど使えないということにな
るのでは。

---------検索結果を呼び出したら元のURLに戻すようにしてみました。
#!/usr/bin/env ruby -Ks
require 'win32ole'

class EventReceiver
  def initialize(ie)
    @ie = ie
  end
  def call(*arg)
    Thread.start do
      @ie.navigate("http://www.sanseido.net/")
      sleep 0.1 until @ie.readystate == 4
      d = @ie.document
      s = d.parentWindow.clipboardData.getData("Text")
      puts "clipboard: #{s}"
      d.getElementById("TWords").innerText = s
      d.getElementById("submit1").click
      d.parentWindow.history.back
    end
  end
end

ie = WIN32OLE.new('InternetExplorer.Application')
ie.visible = true
url = ARGV.shift

begin
  ie.navigate(url)
  rcv = EventReceiver.new(ie)
  ev = WIN32OLE_EVENT.new(ie, 'DWebBrowserEvents2') #DocumentComplete用
  ev.on_event("Quit") {|*args| throw :done}
  #NavigateCompleteはhistory.back時には通知されない
  ev.on_event("DocumentComplete") {|*args| 
    puts 'doc complete :' + args[1]
    if args[1] == url
      #再度設定しないと無効になる。
      Thread.start do
	ie.document.body.attachEvent('oncopy', rcv)
      end
    end
  }
  sleep 0.1 until ie.readystate == 4
  catch(:done) {
    loop {
      WIN32OLE_EVENT.message_loop
      sleep 0.246
    }
  }
ensure
  ie.quit  
end

-- 
arton <artonx@yahoo.co.jp>

__________________________________________________
Do You Yahoo!?
http://bb.yahoo.co.jp/


In This Thread