tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルリンク先のアドレスを取得するには
記事No12715
投稿日: 2008/07/07(Mon) 06:44
投稿者ととろ
よろしくお願いします。

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

具体的には、ウェブブラウザコントロール上のリンク付きの画像にフォーカスがあるときに、そのリンク先のアドレスを取得する方法を探しています。

どうかご教授のほどよろしくお願いいたします。

[ツリー表示へ]
タイトルRe: リンク先のアドレスを取得するには
記事No12716
投稿日: 2008/07/07(Mon) 07:43
投稿者花ちゃん
> 具体的には、ウェブブラウザコントロール上のリンク付きの画像にフォーカスがあるときに、そのリンク先のアドレスを取得する方法を探しています。

それなら、ステータスバーに表示されるリンクでいいのでしょうか?

それとも、オブジェクト 自体ですか?

それとも下記のような事。
http://homepage1.nifty.com/MADIA/vb/vb_bbs/200211/200211_02110016.html

[ツリー表示へ]
タイトルRe: リンク先のアドレスを取得するには
記事No12717
投稿日: 2008/07/07(Mon) 09:33
投稿者魔界の仮面弁士
MSHTML の DOM から取得する方法と、Active Accessibility を用いる方法とがあります。
前者は、既に花ちゃんさんが回答されているので、私は後者の案を。

Option Explicit

Private Declare Function GetCursorPos Lib "user32" _
    (ByRef lpPoint As Long) As Long

Private Declare Function AccessibleObjectFromPoint Lib "oleacc" _
    (ByVal x As Long, _
     ByVal y As Long, _
     ByRef ppoleAcc As Object, _
     ByRef pvarElement As Variant) As Long

Private Sub Form_Load()
    Timer1.Interval = 300
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    Dim xy(1) As Long
    GetCursorPos xy(0)
    
    Dim objAccessible As Object
    Dim v As Variant
    AccessibleObjectFromPoint xy(0), xy(1), objAccessible, v
    
    Dim sName As String, sValue As String
    On Error Resume Next
    sName = objAccessible.accName(v)
    sValue = objAccessible.accValue(v)
    On Error GoTo 0

    Label1.Caption = sName
    Label2.Caption = sValue
End Sub

[ツリー表示へ]
タイトルRe^2: リンク先のアドレスを取得するには
記事No12728
投稿日: 2008/07/07(Mon) 20:57
投稿者ととろ

ご回答ありがとうございます。

花ちゃん さん

> それなら、ステータスバーに表示されるリンクでいいのでしょうか?

はい、まさにそれを取得したいと思いまして。
(ステータスバーにリンクが表示されているということを今まで知りませんでした。)
ただ、ご提示頂いたリンク先のコード(魔界の仮面弁士さんのコード)でイミディエイトウインドウに表示されるアドレスのうちフォーカスのあるものが取得したいと思いまして。


魔界の仮面弁士 さん

> Active Accessibility を用いる方法とがあります。

このような方法があるんですね。勉強になります。

ご提示いただいた方法でいっとき試していたところ、ほとんどうまく動いたのですが、ときどき、マウスがちょっと動いてしまったりしたときに別のオブジェクトが参照されてしまうという現象が起こることがありました。

そこで、直接マウスの下のオブジェクトを取得する方法ではなく、フォーカスを持ったオブジェクトを取得する方法も考えてみようと思いました。

ウェブブラウザコントロール上やインターネットエクスプローラ上でタブキーを押していくとフォーカス(点線の四角で囲まれたもの)が左上から右下に動いていきますが、そのフォーカスのあるオブジェクトを取得(具体的にはそのリンク先のアドレスを取得)したいと思いまして。

そのようなフォーカスを持ったオブジェクトを取得することは可能でしょうか?

まとまりのない文章ですいませんが、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^3: リンク先のアドレスを取得するには
記事No12729
投稿日: 2008/07/07(Mon) 21:49
投稿者花ちゃん
> はい、まさにそれを取得したいと思いまして。
> (ステータスバーにリンクが表示されているということを今まで知りませんでした。)

だったら、下記で取得できます。(但し、動作確認用のコードです)

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

[ツリー表示へ]
タイトルRe^4: リンク先のアドレスを取得するには
記事No12730
投稿日: 2008/07/07(Mon) 23:59
投稿者ととろ

ご回答ありがとうございます。

花ちゃん さん

わざわざサンプルありがとうございます。ステータスバーに表示される文字列の取得法、勉強になりました。

ただ、今回はこの方法ではうまくいかない場合がありまして。
それは、ステータスバーに表示されるURLと、フォーカスのあるオブジェクトのリンク先のURLは違う場合があるときです。
タブキーを押してフォーカスを移動するとその瞬間はステータスバーに、フォーカスのあるオブジェクトのリンク先のURLが表示されますが、その後、マウスを移動すると、マウスの下にあるオブジェクトのリンク先のURLが表示されます。

マウスの位置のオブジェクトではなく、現在フォーカスのあるオブジェクトのリンク先のURLを取得するにはどうすればいいでしょうか?

何度もすいませんがよろしくお願いいたします。

[ツリー表示へ]
タイトルRe^5: リンク先のアドレスを取得するには
記事No12731
投稿日: 2008/07/08(Tue) 01:27
投稿者魔界の仮面弁士
> 現在フォーカスのあるオブジェクトのリンク先のURLを取得するには

DOM で行うのであれば、activeElement プロパティから。
Active Accessibility なら、AccessibleObjectFromEvent API から。

[ツリー表示へ]
タイトル【解決】Re^6: リンク先のアドレスを取得するには
記事No12732
投稿日: 2008/07/08(Tue) 03:13
投稿者ととろ

魔界の仮面弁士さん、ご回答ありがとうございます。

> DOM で行うのであれば、activeElement プロパティから。

activeElement.href
で取得することができました。
こんなに簡単に取得できるとは驚きました。

ありがとうございました。

[ツリー表示へ]