ウェブブラウザコントロール上に表示されているページの、現在フォーカスがあるオブジェクト(または、マウスの下のオブジェクト)を取得する方法
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
ソースが欠けていましたあげなおします。
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
「現在フォーカスのあるオブジェクト」と「ステータスバーの値」では天と地ほどの差がありますが、結局どちらがほしいのでしょうか?
ウェブブラウザコントロールってのは VS で D&D でフォームに貼り付けた WebBrowser コントロールでいいのでしょうか?
お挙げになったサンプルコードは「別に立ち上げた InternetExplorer」の「ステータスバーの文字列」を参照してるようですけど。
はぃ、いろいろ試してみたのですがうまくいかず、参考にした元のソースをあげてみました、私のやりたいことは。
既に立ち上がっているブラウザのステータスバーのURLを取得したいということ。
ステータースバーでなくてもマウスポイントにあるリンク先のURLなのですが。
Dim IEApp As Object
IEApp = GetObject(, "InternetExplorer.application") '
などで既出のブラウザの操作をこころみてる途中です。
ステータスバーの値かマウスが指してるリンク先を取得したいです。
>参考にした元のソースをあげてみました
あるサイトの著作物を丸々コピペして投稿(転載)されているようですが
許可を得ておられないなら、違法となりますのでご注意の程。
>いろいろ試してみたのですがうまくいかず
何をどのように試されたのでしょうか? ご自分のコードを投稿して下さい。
InternetExplorer は、一応、.NET でも使用できますし、サンプルも
いくらでもあるし、同じサイトにもあったはずです。
元々の投稿のところをよく見れば、違った方法も記載されていますよね。
ネット上で拾えるプログラムやHPのソースコード等は日進月歩。
よほどの高度な技術を伴うもの意外は著作権は主張できません。
> 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 プロパティを使ってみると良いかも。