DOBON.NET DOBON.NETプログラミング掲示板過去ログ

IEでクリックしたアイテムを取得する方法

環境/言語:[VB.NET]
分類:[.NET]

こんばんは。
サイトのページをインターネットエクスプローラに表示し、ページ中にあるアイテムをクリックした時に、プログラムにてそのアイテムの情報、フレームの番号、タグは何か(tags(?))、アイテムの番号(item(n))って取得する事ができるでしょうか?どのような手法がありますか?
また、アイテムをクリックしたらその箇所のHTMLの内容が取得できる手法でもよいのですが。よろしければ教えてください。よろしくお願い致します。
2005/03/10(Thu) 11:16:46 編集(投稿者)

InternetExplorerオブジェクトで試したことはありませんが、
WebBrowserであれば、こんな感じで取得できます。


'イベント取得用のクラスを用意しておく。
Public Class DHTMLEventHandler
  Implements IDisposable
  Private OwnerDocument As mshtml.HTMLDocument
  Public Event OnEvent(ByVal E As mshtml.IHTMLEventObj)
  Public Sub New(ByVal OwnerDocument As mshtml.HTMLDocument)
    Me.OwnerDocument = OwnerDocument
  End Sub
  <System.Runtime.InteropServices.Dispid(0)> Public Sub DHTMLEvent()
    Dim W As mshtml.IHTMLWindow2 = Me.OwnerDocument.parentWindow
    Dim E As mshtml.IHTMLEventObj = W.event
    RaiseEvent OnEvent(E)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(E)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(W)
  End Sub
  Public Sub Dispose() Implements System.IDisposable.Dispose
    If Not IsNothing(OwnerDocument) Then
      System.Runtime.InteropServices.Marshal.ReleaseComObject(Me.OwnerDocument)
    End If
    Me.OwnerDocument = Nothing
  End Sub
End Class

Private WithEvents OnClickHandler As DHTMLEventHandler
Private Doc As mshtml.HTMLDocument
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
  Me.AxWebBrowser1.Navigate2("http://www.google.co.jp/")
End Sub

Private Sub OnClickHandler_OnEvent(ByVal E As mshtml.IHTMLEventObj _
) Handles OnClickHandler.OnEvent
  Dim O As mshtml.IHTMLElement = E.srcElement

  'クリックされた要素を画面に表示
  ListBox1.Items.Add(String.Format("<{0}> ({1}, {2})", O.tagName, E.x, E.y))
  Trace.WriteLine(O.outerHTML)

  System.Runtime.InteropServices.Marshal.ReleaseComObject(O)
End Sub

'ページが読み込まれる度に、onclickイベントを割り当てる。
Private Sub AxWebBrowser1_DocumentComplete(ByVal sender As Object, _
ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent _
) Handles AxWebBrowser1.DocumentComplete
  If Not IsNothing(OnClickHandler) Then
    OnClickHandler.Dispose()
    System.Runtime.InteropServices.Marshal.ReleaseComObject(Doc)
  End If
  Dim D As Object = Me.AxWebBrowser1.Document
  If TypeOf D Is mshtml.HTMLDocument Then
    Doc = DirectCast(D, mshtml.HTMLDocument)
    OnClickHandler = New DHTMLEventHandler(Doc)

    Dim Body As mshtml.IHTMLElement = Doc.body
    Body.onclick = OnClickHandler
    System.Runtime.InteropServices.Marshal.ReleaseComObject(Body)
  Else
    System.Runtime.InteropServices.Marshal.ReleaseComObject(D)
  End If
End Sub
ありがとうございます。
ここまで教えて頂けるとは思っていませんでした。
早速、やってみまして、タグが出てきました。
あとは、応用して行きます。
またよろしくお願いします。
解決済みのチェックを忘れました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板