|
分類:[VB.NET/VB2005 以降]
Internet Explorer_Serverのウィンドウハンドルから、IHTMLDocumentオブジェクトを
得ようとしています。
以下のような宣言をして、GetHTMLDocument()プロシージャを作成したのですが、
SendMessageTimeout()で lpdwResultに値が入ってきません。
hWnd、msgは正常だと思いますし、retには 1が返ってくるのですが…
まずい点がわかりましたらご教示ください。
また、自分で調べてはみましたが FAQでしたら申し訳ありません。
URLなどお教えいただけると助かります。
---------------------------------------
Private Enum SMTO
NORMAL = 0
BLOCK = 1
ABORTIFHUNG = 2
NOTIMEOUTIFNOTHUNG = 8
End Enum
<DllImport("user32.dll", EntryPoint:="SendMessageTimeoutW", SetLastError:=True)>
Private Function SendMessageTimeout(ByVal hWnd As IntPtr, ByVal msg As Integer,
ByVal wParam As IntPtr, ByVal lParam As IntPtr,
ByVal fuFlags As Integer, ByVal uTimeout As Integer,
ByRef lpdwResult As IntPtr) As IntPtr
End Function
<DllImport("oleacc.dll", SetLastError:=True)>
Private Function ObjectFromLresult(ByVal lResult As Int32, ByRef riid As System.Guid,
ByVal wParam As Int32,
<MarshalAs(UnmanagedType.Interface)>
ByRef ppvObject As Object) As Integer
End Function
---------------------------------------
Private Function GetHTMLDocument(ByVal hWnd As IntPtr) As Object
Dim intRet As Integer
Dim ret As IntPtr
Dim lpdwResult As IntPtr
Dim ppvObject As Object
Const IID_IHTMLDocument = "{332C4425-26CB-11D0-B483-00C04FD90119}"
Dim msg As Integer = RegisterWindowMessage("WM_HTML_GETOBJECT")
ret = SendMessageTimeout(hWnd, msg, IntPtr.Zero, IntPtr.Zero, SMTO.ABORTIFHUNG, 1000, lpdwResult)
If ret = 0 Then
MessageBox.Show(Marshal.GetLastWin32Error().ToString)
End If
If lpdwResult Then
Dim IID_IHTMLDocumentGuid As New System.Guid(IID_IHTMLDocument)
intRet = ObjectFromLresult(lpdwResult, IID_IHTMLDocumentGuid, 0, ppvObject)
If intRet = 0 Then
Return ppvObject
End If
End If
End Function
|