问两个关于API的问题~~~
1  如何遍历别的应用程序所有控件的句柄?2 sendmessage函数  如何把个数值或字符串  发送到别的程序的text控件上?

解决方案 »

  1.   

    运行的时候打开计算器
    Option ExplicitPrivate Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private 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
    Private Const BM_CLICK = &HF5
    Private Const WM_SETTEXT = &HC
    Const WM_GETTEXT = &HD
    Const WM_GETTEXTLENGTH = &HEPrivate Sub Command1_Click()
    Dim t As Long
    Dim b As Long
    Dim d As Long
    Dim clong As Long
    Dim astr As String * 256t = FindWindow(vbNullString, "计算器")
    b = FindWindowEx(t, ByVal 0&, "Edit", vbNullString)'设置号码
    SendMessage b, WM_SETTEXT, 0, ByVal Text1.Text clong = SendMessage(b, WM_GETTEXTLENGTH, 0, vbNull)
    clong = Len(astr)
    SendMessage b, WM_GETTEXT, clong, ByVal astr
    Debug.Print astr
    End Sub
      

  2.   

    1  如何遍历别的应用程序所有控件的句柄?
    使用GW_CHILD,GW_HWNDNEXTPrivate Const GW_CHILD = 5
    Private Const GW_HWNDNEXT = 2tWnd = FindWindow(vbNullString, "Form1") 
    bWnd = GetWindow(tWnd, GW_CHILD)
    Do
    lpClassName = Space(256)
    RetVal = GetClassName(bWnd, lpClassName, 256)
    i = InStr(1, lpClassName, Chr(0))
    mName = Left(lpClassName, i - 1)
    If mName = "打开(&O)" Then
    SendMessage bWnd, BM_CLICK, 0, 0
    Exit Do
    Else
    bWnd = GetWindow(bWnd, GW_HWNDNEXT)
    End If
    Loop
      

  3.   

    严重感谢online(龙卷风V2.0--再战江湖) 还有个问题~~~ GetClassName 如何得到类名?
    完了马上结贴
      

  4.   

    GetClassName  的问题已经解决