2013-10-25 60 views
0

所以,我試圖捕獲一個窗口,它有兩個文本框,併發送一些文本到這兩個文本框。但是這兩個文本框沒有標題和相同的類名「編輯」。到目前爲止,我所能做的就是捕獲第一個文本框,就是這樣。如何捕獲兩個沒有標題和相同類的文本框?

粘貼在下面是我的代碼。

Imports System.Runtime.InteropServices 
Imports System.Text 

Public Class Form1 

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ 
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer 

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ 
    (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, _ 
    ByVal lParam As String) As Integer 

    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _ 
    (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, _ 
    ByVal lpsz2 As String) As Integer 

    Private Const WM_SETTEXT As Integer = &HC 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _ 
    System.EventArgs) Handles Button1.Click 

     Dim hwnd As Integer 
     Dim txt As Integer 
     Dim text As String 

      hwnd = FindWindow(vbNullString, "Description") 
      If hwnd <> Nothing Then 
       txt = FindWindowEx(hwnd, 0, "Edit", vbNullString) 
       If txt <> Nothing Then 
        text = "00000" 
        SendMessage(txt, WM_SETTEXT, 0, text) 
       End If 
      End If 

    End Sub 

End Class 
+0

這是什麼都與「窗口API函數」做的,不是事實,其他你正在使用一些? –

+0

對不起,如果我輸入了錯誤的標題 –

回答

5

使用的第二個參數FindWindowEx()被稱爲 「hwndChildAfter」:

的句柄,子窗口。搜索從Z順序的下一個子窗口 開始。子窗口必須是hwndParent的直接子窗口 ,而不僅僅是子窗口。

所以,你應該能夠通過第一個文本框手柄,以獲得下一個這樣的:

txt2 = FindWindowEx(hwnd, txt, "Edit", vbNullString) 
+0

聽起來像這樣應該工作。我已經使用您的意見編寫了代碼,並將在接下來的2個半小時內對其進行測試,並會盡快通知您。非常感謝您的輸入 –

+0

您還可以將「txt」傳遞給[GetWindow](http://msdn.microsoft.com/en-us/library/windows/desktop/ms633515(v = vs.85).aspx )帶有GW_HWNDNEXT標誌的API。 「如果指定的窗口是一個子窗口,則該句柄標識一個兄弟窗口。」 –

+0

它像一個魅力工作。非常感謝Idle_Mind –

相關問題