例如,有一程序abc.exe裡有5個textbox,而我要實現從自己的程序裡輸入數據後,依次向abc.exe裡的5個textbox發送數據,思想是:在自己的程序的文本框裡輸入數據,按Enter鍵後copy,然後在abc.exe裡的某一個textbox裡貼上,自己程序重新獲得焦點。
請求各路好手幫忙,實在是無法忍受沒有TabIndex窗體的數據輸入了,小弟是個數據錄入員當然是想快一點了。

解决方案 »

  1.   

    复杂了,至少得看看API,要是量不大你就这么凑合着干吧
      

  2.   

    以qq为例
    2个text控件,1个command控件. Private Declare Function FindWindow Lib "user32" 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 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 ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongOption Explicit
    Private Const WM_SETTEXT = &HC
    Private Const BM_CLICK = &HF5Private Sub Command1_Click()
    ShellExecute Me.hwnd, "open", "D:\Tencent\QQ\QQ.exe", vbNullString, vbNullString, vbNormalFocus
    Dim QQHwnd As Long, QHwnd As Long, PHwnd As Long, RHwnd As Long
    Do While RHwnd = 0
    QQHwnd = FindWindow("#32770", vbNullString)
    QHwnd = FindWindowEx(QQHwnd, 0, "ComboBox", vbNullString)
    PHwnd = FindWindowEx(QQHwnd, 0, "Edit", vbNullString)
    RHwnd = FindWindowEx(QQHwnd, 0, "Button", "µÇ¼")
    DoEvents
    Loop
    SendMessage QHwnd, WM_SETTEXT, 0, ByVal Text1.Text  'text1内为QQ号码.
    SendMessage PHwnd, WM_SETTEXT, 0, ByVal Text2.Text  'Text2内为密码.
    SendMessage RHwnd, BM_CLICK, 0, 0 '点击登录按钮
    End
    End Sub
      

  3.   

    Copy的话就在其它程序上发WM_PASTE消息
      

  4.   

    代码已经测试通过,但有一个问题!如果是其他的窗口(类也是文本框),而且有内容在先,就会直接把原内容替换,而不是添加。后来我查了一下,WM_SETTEXT消息,与Text1.Text="XXXXXX"是相同的效果。不过这个问题似乎不是问题,呵呵..........
      

  5.   

    謝謝online.
    只是我要的不是這樣的結果,我要的是對一個數據庫的窗口的數據錄入(需循環使用),要做一個自己的程序,程序的主窗口有4個文本框,和一個command按鈕。目的是,在自己的程序的4個文本框裡分別輸入數據,按command按鈕後,將這4個數據分別輸入公司數據庫的窗口裡的對應的4個文本框,然後,繼續重做上一步(即新增一筆記錄),有沒有辦法實現,誰能夠指點一下,因為這個問題需用到API函數,而API又不是一下就能搞懂的,所以求各路英雄不吝賜教。若有興趣可留下Email,我可以把窗口圖像發過去,明白些!
      

  6.   

    我覺得online的代碼可以滿足你的要求。你的數據庫窗口的command按鈕不是“保存/確認”嗎?你的程序發送數據和BM_Click消息后,你的數據庫窗口的數據應該是保存到了數據庫里面了,然后又處于"新增數據"的狀態,接著你可以用你的程序接著發送啊。
      

  7.   

    但是不知道為什麼我的API view裡面,沒有BM_Click這個常數,是不是沒有的只要定義也可以用呢?
      

  8.   

    API View里面是沒有BM_Click這個常數,你需要自己在模塊中定義
    Const BM_CLICK = &HF5
      

  9.   

    我最近正有一朋友和你有相同的要求,你就发你的截图让我看看吧myjian01#yahoo.com.cn把#换成@,这是为了防LJ邮件扫描器。
      

  10.   

    小馬,能不能搞定,我後來又補發了一張圖片過來了,有沒有去盾,換了個Mail應該可以看得到全部了!
      

  11.   

    如果是在同一個程式中就好辦,例如在b窗體中的四個Textbox1的內容發送到a窗體中用RaiseEvent 加幾個參數就可以搞定了!