古詩詞大全網 - 成語查詢 - VB獲取指定窗口的子程序句柄

VB獲取指定窗口的子程序句柄

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

'這是定義獲得窗口句柄的API函數.

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 '這句是定義向獲得窗口句柄發送按鍵消息的API函數.

例子:妳先建壹個工程

form1.caption="12345

畫壹個command1 名字為 "確定1"

事件

Private Sub Command1_Click()

msgbox Me.Hwnd '顯示確定按鈕的句柄

End Sub

生成12345.exe

關閉VB6

打開VB6

再建壹個工程 代碼如下:

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 PostMessage& Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)

Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) 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 Const WM_LBUTTONDOWN = &H201

Private Const WM_LBUTTONUP = &H202

Private Const MK_LBUTTON = &H1

Dim hpwnd As Long, hcwnd As Long

Dim iResult As Long

Private Sub Command1_Click()

hpwnd = FindWindow(vbNullString, "12345")

hcwnd = FindWindowEx(hpwnd, 0, vbNullString, "確定")

SetForegroundWindow hcwnd

iResult = SendMessage(hcwnd, WM_LBUTTONDOWN, 0, 0&)

iResult = SendMessage(hcwnd, WM_LBUTTONUP, 0, 0&)

End Sub

然後先運行 事先生成好的12345.exe

再運行後建的那個

妳單擊確定 就會使12345.exe的確定按鈕被單擊 返回它的hwnd

我的方法是先找到12345.exe的主窗口 然後根據主窗口的句柄獲得其確定按鈕的句柄 再使用sendmessage 發送模擬鼠標左鍵單擊

VB控件的句柄 壹般可用me.hwnd 方法獲得