Declare Function EnumWindows Lib "user32" (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 PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, _
    ByVal lngWMsg As Long, ByVal lngWParam As Long, ByVal lngLparam As Long) As LongDeclare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
    (ByVal hwnd As Long, ByVal lpClassName As String, _
    ByVal nMaxCount As Long) As Long
Function EnumWindowsProc(ByVal hwnd As Long, ByVal lparam As Long) As Boolean
'EnumWindowsProc这是个过程,被称作回调函数,此函数只能写在标准模块下。    Dim S As String, W As String
    S = String(256, Chr(0))     '很多API的返回值需要一个指针来指向返回地址,事先用String(256,Chr(0))给返回值分配储存空间
    W = String(256, Chr(0))
    Call GetWindowText(hwnd, S, 256)
    Call GetClassName(hwnd, W, 256)
    W = Left(W, InStr(W, Chr(0)) - 1)   'Left(string, length)截取字串左边某几个字符
                                        'W=Left(W,InStr(W,Chr(0))-1) 是取出W字符串中的第一行内容赋值到S变量
    S = Left(S, InStr(S, Chr(0)) - 1)
    If Len(S) > 0 Then
        Form1.Text1.Text = Form1.Text1.Text & S & "-->" & hwnd & "-->" & W & vbCrLf
    End If    EnumWindowsProc = True
End FunctionPrivate Sub Form_load()    EnumWindows AddressOf EnumWindowsProc, 0&
End Sub'-----------------------------------------------------------------------------上面这段程序可以获得所有窗体的标题、句柄和类型。 我现在只需要共有多少个窗体的数量。于是我改了下代码,自己建立了个剔去了用不到的类名和标题的函数代码如下:'-----------------------------------------------------------------------------Function EnumGetWindowsCount(ByVal hwnd As Long, ByVal lparam As Long) As Integer
'EnumGetWindowsCount将返回当前系统运行的所有窗口数量
    Dim S As String
    Dim i As Integer: i = 0
    S = String(256, Chr(0))     '很多API的返回值需要一个指针来指向返回地址,事先用String(256,Chr(0))给返回值分配储存空间
    S = Left(S, InStr(S, Chr(0)) - 1)
    If Len(S) > 0 Then
        i = i + 1
    End If
    EnumGetWindowsCount = i
End FunctionPrivate Sub Form_load()
    EnumWindows AddressOf EnumGetWindowsCount, 0&
End Sub
我发现我这样改是不对的,忽略了EnumWindows是枚举的?应该怎样改才能实现:1、使函数返回所有窗体的总数,最好能指点下原理,刚开始接触API2、怎样做一个函数,只查询指定窗口标题的窗体已打开,返回结果和该窗体句柄3、如果获得该窗体句柄,怎样能获得该窗体所有按钮、文本框、下拉框等空间的名称和句柄(窗体并非处于焦点)4、如果获得了上述窗口各输入空间的句柄, 如一个文本框,文本框里输入了几个字后,能否提取到输入的内容不胜感激