ブラウザでマウスが位置する箇所の文字列

解決


itou  2008-03-15 11:27:23  No: 100461  IP: 192.*.*.*

ブラウザコントロールを使用しています。
マウスが位置する箇所の文字を取りたいのですが出来るでしょうか?
リンクがある先のアドレスは取得できますが、翻訳ソフトなどで
例えば、単なる文字列の上にマウスが位置すると、適当に単語を区切って
ポップアップで表示するものがあるのですが、ポップアップでなくてもいいのですが、文字を取得することが出来るのでしょうか
よろしくお願いします。

編集 削除
やじゅ  2008-03-16 11:26:22  No: 100462  IP: 192.*.*.*

結構、難しいですね。
範囲選択した文字を取得するのは、CreateRangeなど情報があるので
しいて、やるやり方としたら

1.マウス位置を取得
2.マウス位置からある程度の文字範囲まで範囲選択
3.範囲選択した文字を取得
でしょうか

編集 削除
魔界の仮面弁士  2008-03-16 12:13:59  No: 100463  IP: 192.*.*.*

> マウスが位置する箇所の文字を取りたいのですが出来るでしょうか?

oleacc.dll を参照設定した上で、ListBox と Timer と WebBrowser を
フォームに貼って、下記のコードを試してみてください。
(カーソルが WebBrowser の上にあるかどうかは判定していません)

'-----------
Option Explicit

Private Declare Function GetCursorPos Lib "user32" _
   (ByRef xyScreen As Long) As Long
    
Private Declare Function AccessibleObjectFromPoint Lib "oleacc" _
   (ByVal xScreen As Long, _
    ByVal yScreen As Long, _
    ByRef ppvObject As Any, _
    ByRef pvarChild As Variant) As Long
    
Private Sub Form_Load()
    Timer1.Interval = 250
    Timer1.Enabled = True
    WebBrowser1.Navigate "http://msdn.microsoft.com/library/ja/jpdnacc/htm/ms_active.asp"
End Sub

Private Sub Timer1_Timer()
    Dim xy(1) As Long
    GetCursorPos xy(0)
    
    Dim objAcc As IAccessible
    Dim child As Variant
    AccessibleObjectFromPoint xy(0), xy(1), objAcc, child
    
    List1.Clear
    On Error Resume Next
    Dim ltwh(3) As Long
    objAcc.accLocation ltwh(0), ltwh(1), ltwh(2), ltwh(3), child
    List1.AddItem "Pos:" _
        & "Left" & CStr(ltwh(0)) & "," _
        & "Top" & CStr(ltwh(1)) & "," _
        & "Width" & CStr(ltwh(2)) & "," _
        & "Height" & CStr(ltwh(3))
    List1.AddItem "Name=" & objAcc.accName(child)
    List1.AddItem "Value=" & objAcc.accValue(child)
    List1.AddItem "Description=" & objAcc.accDescription(child)
End Sub

編集 削除
itou  2008-03-16 17:28:23  No: 100464  IP: 192.*.*.*

ご回答有難うございました。

魔界の仮面弁士さん有難うございます。
動作しました。

もう一度プランを練り直してから考えたいと思います。

取り敢えず解決マークを付けさせてもらいます。

再び質問する事があるかもしれませんが、
よろしくお願いします。

編集 削除
nobu  2008-03-18 19:57:51  No: 100465  IP: 192.*.*.*

すでに解決にマークが付いていますが
「oleacc.dll を参照設定した上で」について教えて下さい。
「参照」で個々に調べましたが私のVB6  SP6では
出て来ませんでした。
oleacc.dll 自体は \Windows32\ フォルダ内にあります。
「参照」のどれにレ点を付ければ良いでしょうか?

編集 削除
nobu  2008-03-18 19:57:53  No: 100466  IP: 192.*.*.*

すでに解決にマークが付いていますが
「oleacc.dll を参照設定した上で」について教えて下さい。
「参照」で個々に調べましたが私のVB6  SP6では
出て来ませんでした。
oleacc.dll 自体は \Windows32\ フォルダ内にあります。
「参照」のどれにレ点を付ければ良いでしょうか?

編集 削除
魔界の仮面弁士  2008-03-19 00:33:03  No: 100467  IP: 192.*.*.*

一覧に無いなら、[参照]ボタンを押して、DLL を直接指定しましょう。

編集 削除
nobu  2008-03-19 09:28:59  No: 100468  IP: 192.*.*.*

魔界の仮面弁士さん、
何時もありがとうございます。
、[参照]ボタンを押して、DLL を直接指定...をやったことが無くて
知りませんでした。  ありがとうございました。
上記のサンプル、お陰でテスト出来ました。

編集 削除