none
这段代码哪里错了,为什么不能成功? RRS feed

  • 问题

  •     Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
        Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, ByVal lpdwResult As Long) As Long
        Declare Function ObjectFromLresult Lib "OLEACC.DLL" Alias "ObjectFromLresult" (ByVal lResult As Long, ByVal riid As Byte(), ByVal wParam As Long, ByVal ppvObject As Object) As Long
        Function loads(ByVal Hwnd As Long) As Boolean
            Dim id As Long
            Dim um As Long
            Dim obj As Object
            Dim riid As Byte() = {32, 197, 111, 98, 30, 164, 207, 17, 167, 49, 0, 160, 201, 8, 38, 55}
            Dim ret As Long
            id = RegisterWindowMessage("WM_HTML_GETOBJECT")
            SendMessageTimeout(Hwnd, id, 0, 0, 2, 1000, um)
            ret = ObjectFromLresult(um, riid, 0, obj)
            If ret = 0 Then
                End
            End If
        End Function
    主要是为了用IES句柄构造一个实例对象.
    2009年8月28日 11:11

全部回复

  • 错误 1 未定义类型“Win32Functions”。
    • 已标记为答案 493595708 2009年9月6日 6:15
    • 取消答案标记 493595708 2009年9月6日 6:15
    2009年9月6日 6:15
  • Public Class IEDom
        Declare Function ObjectFromLresult Lib "oleacc" (ByVal lResult As Int32, ByRef riid As System.Guid, ByVal wParam As Int32, ByRef ppvObject As IHTMLDocument) As Int32
        Dim win32 As New Win32Functions
        Public Function IEDOMFromhWnd(ByVal hWnd As IntPtr) As IHTMLDocument
            Dim IID_IHTMLDocument As System.Guid = New System.Guid("626FC520-A41E-11CF-A731-00A0C9082637")
            Dim hWndChild As Int32
            Dim lRes As Int32
            Dim lMsg As Int32
            Dim hr As Int32
            If Not hWnd.Equals(0) Then
                If Not IsIEServerWindow(hWnd) Then
                    ' Get 1st child IE server window     
                    win32.EnumChildWindows(hWnd, AddressOf EnumChild, hWnd)
                End If
                If Not hWnd.Equals(0) Then
                    ' Register the message          
                    lMsg = win32.RegisterWindowMessage("WM_HTML_GETOBJECT")
                    ' Get the object             
                    Call win32.SendMessageTimeout(hWnd, lMsg, 0, 0, win32.SMTO_ABORTIFHUNG, 1000, lRes)
                    If lRes Then
                        ' Get the object from lRes         
                        hr = ObjectFromLresult(lRes, IID_IHTMLDocument, 0, IEDOMFromhWnd)
                        If hr Then Throw New COMException(hr)
                    End If
                End If
            End If
        End Function
        Private Function EnumChild(ByVal hWnd As IntPtr, ByRef lParam As IntPtr) As Int32
            If IsIEServerWindow(hWnd) Then
                lParam = hWnd
            Else
                EnumChild = 1
            End If
        End Function
        Private Function IsIEServerWindow(ByVal hWnd As IntPtr) As Boolean
            Dim Res As Int32
            Dim ClassName As StringBuilder = New StringBuilder(100)
            ' Get the window class name   
            Res = win32.GetClassName(hWnd, ClassName, ClassName.MaxCapacity)
            IsIEServerWindow = StrComp(ClassName.ToString(), "Internet Explorer_Server", CompareMethod.Text) = 0
        End Function
    End Class
    错误提示:错误 1 未定义类型“Win32Functions”。
    代码来源: http://www.vbforums.com/showthread.php?t=357949
    2009年9月6日 6:37
  • Win32Functions 是个类,但你没有定义这个类. 你的代码是从哪里找的,网上有的代码是不全的.正常情况你的代码中应该还包括以下语句:

    Public  Class IEDom

    END Class

    这两中语句中间包括了这个类的具体的实现的方法.
    2009年9月6日 8:44
  • 我已经写了,代码来源已经注明.

    2009年9月6日 9:07
  • 你好!
         检查一下是否存在Win32Functions类的定义,时候缺少Imports语句,是否缺少程序集引用!
    周雪峰
    2009年9月6日 11:32
    版主
  • 你好!
         检查一下是否存在Win32Functions类的定义,时候缺少Imports语句,是否缺少程序集引用!
    周雪峰
    2009年9月6日 11:32
    版主
  • 在MSDN里差不到Win32Functions类

    2009年9月6日 12:24
  • 你好!
         这个是自定义的类,你的代码中缺少这个类的定义!
    周雪峰
    2009年9月6日 13:58
    版主
  • 用API函数代替会发现参数结构不对!
    2009年9月7日 0:58
  • 你需要自己定义参数结构,然后传入参数!
    你要使用哪个API,我给你写个例子!
    周雪峰
    2009年9月7日 4:59
    版主