IEのステータスバーの値を取得


えりぴー  2008-10-13 21:55:59  No: 140649

ウェブブラウザコントロール上に表示されているページの、現在フォーカスがあるオブジェクト(または、マウスの下のオブジェクト)を取得する方法

VB6だったら発見できたのですが、VB2005で動くようにかきかえてもらえませんでしょうか?
よろしくおねがいします。

        Option Explicit

        Private IE As SHDocVw.InternetExplorer

    Private Sub Form_Load()
        IE = New SHDocVw.InternetExplorer
        IE.Navigate("http://hanatyan.sakura.ne.jp/")
        IE.Visible = True
        Timer1.Interval = 200
        Timer1.Enabled = True
    End Sub


えりぴ  2008-10-13 21:58:39  No: 140650

ソースが欠けていましたあげなおします。

Option Explicit

Private IE As SHDocVw.InternetExplorer

Private Sub Form_Load()
   Set IE = New SHDocVw.InternetExplorer
   IE.Navigate ("http://hanatyan.sakura.ne.jp/")
   IE.Visible = True
   Timer1.Interval = 200
   Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
   On Error Resume Next
   Dim myStatusText As String
   myStatusText = IE.StatusText
   If Left$(myStatusText, 4) = "http" Or Left$(myStatusText, 4) = "ftp" Then
      Label1.Caption = IE.StatusText
   Else
      Label1.Caption = ""
   End If
End Sub


Hongliang  2008-10-13 22:09:01  No: 140651

「現在フォーカスのあるオブジェクト」と「ステータスバーの値」では天と地ほどの差がありますが、結局どちらがほしいのでしょうか?
ウェブブラウザコントロールってのは VS で D&D でフォームに貼り付けた WebBrowser コントロールでいいのでしょうか?
お挙げになったサンプルコードは「別に立ち上げた InternetExplorer」の「ステータスバーの文字列」を参照してるようですけど。


えりぴー  2008-10-13 22:17:44  No: 140652

はぃ、いろいろ試してみたのですがうまくいかず、参考にした元のソースをあげてみました、私のやりたいことは。

既に立ち上がっているブラウザのステータスバーのURLを取得したいということ。
ステータースバーでなくてもマウスポイントにあるリンク先のURLなのですが。

Dim IEApp As Object
        IEApp = GetObject(, "InternetExplorer.application") '

などで既出のブラウザの操作をこころみてる途中です。
ステータスバーの値かマウスが指してるリンク先を取得したいです。


東京都議  2008-10-14 03:40:25  No: 140653

>参考にした元のソースをあげてみました

あるサイトの著作物を丸々コピペして投稿(転載)されているようですが
許可を得ておられないなら、違法となりますのでご注意の程。

>いろいろ試してみたのですがうまくいかず
何をどのように試されたのでしょうか? ご自分のコードを投稿して下さい。
InternetExplorer は、一応、.NET でも使用できますし、サンプルも
いくらでもあるし、同じサイトにもあったはずです。
元々の投稿のところをよく見れば、違った方法も記載されていますよね。


著作  2008-11-30 16:49:55  No: 140654

ネット上で拾えるプログラムやHPのソースコード等は日進月歩。
よほどの高度な技術を伴うもの意外は著作権は主張できません。


魔界の仮面弁士  2008-11-30 19:08:12  No: 140655

> VB2005で動くようにかきかえてもらえませんでしょうか?
えぇー? 他人任せですか? (^^;

で。書き換える以前に、そのコードではプログラムから起動された
IE しか処理できませんので、期待する結果にならないように思えます。

IE の列挙は、ShellWindows コレクションにて行えなえます。
COM ベースのオブジェクトなので、Marshal.ReleaseComObject を忘れずに。
http://support.microsoft.com/kb/176792/en-us
http://msdn.microsoft.com/en-us/library/bb773974.aspx

ただし、複数の IE が起動していた場合に、どれとどれを監視対象にするかを
どのようにして定めるのか、事前に決めておいてくださいね。
(すべて監視、最初に見つけたものを監視、マウス座標で判定、等々)

なお、対象となるウィンドウが分かっている場合には、ShellWindows を使うよりも、
HTML の DOM を WM_HTML_GETOBJECT で直接拾った方が手っ取り早いかも。
http://support.microsoft.com/kb/249232/en-us

> 現在フォーカスがあるオブジェクト(または、マウスの下のオブジェクト)
フォーカスがリンク1にあって、マウス座標はリンク2の所にあった場合、
どちらを取得したいのでしょうか?

マウス位置のリンク情報を取得する方については、幾つか方法があります。

  (案1) IAccessible インターフェイス(COM 版)を利用する。
  http://msdn.microsoft.com/en-us/library/ms696097.aspx
  http://www.microsoft.com/downloads/details.aspx?familyid=3755582a-a707-460a-bf21-1373316e13f0&displaylang=en
  http://msdn.microsoft.com/ja-jp/accessibility/bb960468.aspx

  (案2) IAccessible インターフェイス(マネージ版)を利用する。
  http://msdn.microsoft.com/ja-jp/library/accessibility.iaccessible.aspx

  (案3) MSHTML を用いて、<a> 要素のリンク先を取得する。
  http://msdn.microsoft.com/en-us/library/aa741317.aspx

  (案4) InternetExplorer のステータスバーの値を読み取る。
  http://msdn.microsoft.com/en-us/library/aa752076.aspx

案1/案2 の場合、リンク先の URL は「Value」として得られるかと。
IAccessible の取得方法は幾つかありますが、マウス座標を元にするなら
AccessibleObjectFromPoint APIを利用できます。(親から辿っても良いけど)

案3 の場合、InternetExplorer.Document プロパティから DOM にアクセスし、
対象となる <a> タグから IHTMLAnchorElement.href プロパティあたりで。

案4 の方法は、えりぴーさん自身が書いておられますね。あとは、
IE の列挙部分を ShellWindows に切り替えれば済むでしょう。なお、
タイマー監視の替わりに、StatusTextChange イベントを利用できます。

マウス座標では無く、フォーカスを得ている所をターゲットにするなら、
activeElement プロパティを使ってみると良いかも。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加