我的QQ是  173256432
[email protected]

解决方案 »

  1.   

    FindWindowEx VB声明 
    Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long 
    说明 
    在窗口列表中寻找与指定条件相符的第一个子窗口 
    返回值 
    Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hWnd1 Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找) 
    hWnd2 Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索 
    lpsz1 String,欲搜索的类名。零表示忽略 
    lpsz2 String,欲搜索的类名。零表示忽略 我觉得仔细看应该能明白
      

  2.   

    其实,hwnd2  如果不设为0,根本找不到什么,如果能设为其他,可以举个例子吗另外  怎样对findwindowex进行多次调用,从而找到可以符合条件的众多子窗体的其中一个(我需要的),就象找test中的text2的hwnd?
      

  3.   

    to 楼主:1.用 Findwindow 找到包含文本框的程序的主窗口句柄
    2.用  EnumChildwindows + AddressOf 函数枚举所有子窗口
    3.用 GetClassInfo 函数找到类名为“Edit”的窗口,就是你要的text
      

  4.   

    wxy_xiaoyu你说的不错
    但我现在用enumchildwindows  +addressof依然遇到重重困难 Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As LongPrivate Sub Command3_Click()
     List2.Clear
    EnumChildWindows hwndrecv, AddressOf enumchildwindowspro, 0&
    End SubFunction enumchildwindowspro(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim s As String
    Dim hwndrecv
    s = String(80, 0)
    hwndrecv = FindWindow(vbNullString, "test")
    Call GetWindowText(hwndrecv, s, 80)
    s = Left(s, InStr(s, Chr(0)) - 1)
    If Len(s) > 0 Then
    Form1.List2.AddItem s
    End If
    enumchildwindowspro = True
    End Function用上面的方法列举出来全是   test的标题 ,接下来GetClassInfo 该怎么用?
      

  5.   

    以下是EnumChildWindows 的例子'in a form
    Private Sub Form_Load()
        Me.AutoRedraw = True
        EnumChildWindows GetDesktopWindow, AddressOf EnumChildProc, ByVal 0&
    End Sub'''注意枚举函数一定要写在模块里!
    'in a module
    Declare Function GetDesktopWindow Lib "user32" () As Long
    Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
    Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
        Dim sSave As String
        'Get the windowtext length
        sSave = Space$(GetWindowTextLength(hwnd) + 1)
        'get the window text
        GetWindowText hwnd, sSave, Len(sSave)
        'remove the last Chr$(0)
        sSave = Left$(sSave, Len(sSave) - 1)
        If sSave <> "" Then Form1.Print sSave
        'continue enumeration
        EnumChildProc = 1
    End Function
      

  6.   

    GetClassInfo 使用的句柄就是Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
                      
    这个函数的第一个参数 hwnd所以当然是用在 该函数里面了    
      

  7.   

    GetClassInfo具体用法
    能给出一个实际例子吗? 用这样的方法能不能找到一个打开的网页中的文本框?兄弟们继续努力!
      

  8.   

    GetClassInfo具体用法示例:Private Type WNDCLASS
        style As Long
        lpfnwndproc As Long
        cbClsextra As Long
        cbWndExtra2 As Long
        hInstance As Long
        hIcon As Long
        hCursor As Long
        hbrBackground As Long
        lpszMenuName As String
        lpszClassName As String
    End Type
    Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
    Private Declare Function GetClassInfo Lib "user32" Alias "GetClassInfoA" (ByVal hInstance As Long, ByVal lpClassName As String, lpWndClass As WNDCLASS) As Long
    Private Sub Form_Paint()
        Dim WC As WNDCLASS
        'Get class info
        GetClassInfo ByVal 0&, "BUTTON", WC
        'Clear the form
        Me.Cls
        'Print the retrieved information to the form
        Me.Print "The button's default background is set to color-number:" + Str$(GetSysColor(WC.hbrBackground))
    End Sub=====================================
    应该是可以网页上的文本框的建议楼主多看看帮助
      

  9.   

    我用GetClassName函数结合鼠标移动查到了我要发送字符串的文本框(其实是个richtext)的句柄,用sendmessage成功把字符串发了过去
    ,现在还有一个问题,就是接着发一个回车键该怎么发?现象:   如果接受数据的程序打开后焦点在其他文本框或控件上,发送消息并不能改变其焦点到我发送的文本框里来,这个也很正常。(被接受程序可能是最小化或者在桌面底部)。也就是说当激活数据接受程序时,发现数据已经到达响应文本框,可焦点可能还在原来他在的位置上。  因此,我怎么往我要发送的文本框里再发送一个回车消息,是不是中间还要夹    EN_SETFOCUS  消息,注意,数据接受程序不掉到最前面来,可能还是最小化状态。我用SendMessage 984552, WM_KEYDOWN, VK_RETURN, ByVal 0&   搞不定?还有我用GetClassName  结合鼠标移动来检测一个IE打开的网页时,页面全部为一个句柄号,这样以来就没有谈网页上哪个文本框的话题,是不是借助整个页面句柄结合发焦点tabs移动到我想要的文本框中?还是有整个页面句柄还有子窗体一说??????