如果有一个执行中的应用程序,假设名字叫做abc,该程序有一个窗体,窗体上有一个文本框(不一定是vb里面的文本框)请问有什么办法编一个程序让这个窗体在无论失去焦点还是拥有焦点的时候,在文本框中发送字符。就是比如让那个程序的文本框中显示abcdedf回车。(注意,不是仅仅的发送文本,是键盘事件,要可以响应回车等命令)。

解决方案 »

  1.   

    tWnd = FindWindow(vbNullString, "abc") 
    bWnd = FindWindowEx(tWnd, ByVal 0&, "ThunderTextBox", vbNullString)
    SendMessage bWnd, WM_SETTEXT, 0, ByVal "abcdedf" & vbCrLf可以新建一个窗口,添加一个文本框
      

  2.   

    得到控件的句柄可以考虑用
    bwnd=GetDlgItem(主窗体句柄,控件ID)
      

  3.   

    大致流程:
    先获得句柄:
    用findwindow获取窗口句柄
    用findwindowex获得控件句柄获得句柄后,就可以模拟键盘输入了:
    可用的方法:
    1 sendkeys
    2 keybd_event 
    3 用sendmessage发送wm_char消息(如果包含中文的话,则发送wm_ime_char消息)
      

  4.   

    回复人: online(龙卷风V2.0--再战江湖) ( ) 信誉:298 
    tWnd = FindWindow(vbNullString, "abc") 
    bWnd = FindWindowEx(tWnd, ByVal 0&, "ThunderTextBox", vbNullString)
    SendMessage bWnd, WM_SETTEXT, 0, ByVal "abcdedf" & vbCrLf可以新建一个窗口,添加一个文本框
    ----------------------------------------------------------online你的说法是对的,但是似乎这只能实现vb间的程序或者vb编写的程序,其他程序就不行啊。
    举个例子,怎么自动在qq的登陆窗口中输入密码什么的?!
    望赐教!3Q very much.
      

  5.   

    t = FindWindow("#32770", vbNullString)
    b = FindWindowEx(t, ByVal 0&, "Edit", vbNullString)
    Dim astr As String * 256
    SendMessage b, WM_SETTEXT, 0, ByVal Text1.Text  'text1内为QQ号码.
      

  6.   

    //举个例子,怎么自动在qq的登陆窗口中输入密码什么的?!Option Explicit
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
    Private Const WM_SETTEXT = &HC
    Private Const BM_CLICK = &HF5
    Private Sub Command1_Click()
        Dim mhwnd As Long
        mhwnd = FindWindow("#32770", vbNullString)
        If mhwnd <> 0 Then
            Dim usernamehwnd As Long
            Dim passwordhwnd As Long
            Dim buttonhwnd As Long
            buttonhwnd = GetDlgItem(mhwnd, &H1) '&H1为按纽的id,用spy++获得,不同版本的qq,可能不尽相同,你最好还是自己查看一下以下
            usernamehwnd = GetDlgItem(mhwnd, &H8A)
            passwordhwnd = GetDlgItem(mhwnd, &HB4)
            If passwordhwnd And usernamehwnd Then
                '输入QQ号码
                SendMessage usernamehwnd, WM_SETTEXT, 0&, ByVal "281187435"
                '输入密码
                SendMessage passwordhwnd, WM_SETTEXT, 0&, ByVal "abcde"
                '点击登陆按钮
                SendMessage buttonhwnd, BM_CLICK, 0&, ByVal 0&
            End If
        End If
    End Sub
      

  7.   

    上面我控制的QQ的版本号为:
    QQ2003III Build0117
      

  8.   

    spy++是什么,难用么?哪里有下载。
      

  9.   

    spy++是visual studio 中的工具,
    装了VC++就会有的。
      

  10.   

    最新版的QQ已经没有那容易就获取它的ID了
    不能在spy++中直接找到了
      

  11.   

    SPY++ 7.10.NET里提取的! 点击下载该文件
    http://www.5ivb.net/club/UploadFile/200453095437byUID34770.rar
      

  12.   

    //举个例子,怎么自动在qq的登陆窗口中输入密码什么的?!
    Private Sub Command2_Click()
    Dim t As Long
    Dim b As Long
    Dim d As Long
    Dim c As Longt = FindWindow("#32770", vbNullString)
    b = FindWindowEx(t, ByVal 0&, "ComboBox", vbNullString)
    c = FindWindowEx(t, b, "Edit", vbNullString)
      
    SendMessage b, WM_SETTEXT, 0, ByVal "57569"
    SendMessage c, WM_SETTEXT, 0, ByVal "ato77"
    d = FindWindowEx(t, ByVal 0&, "Button", "登录")
    SendMessage d, BM_CLICK, 0, 0
    End Sub