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

VB获取指定窗口的子程序句柄,第1张

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函数

例子:你先建一个工程

form1caption="12345

画一个command1 名字为 "确定1"

事件

Private Sub Command1_Click()

msgbox MeHwnd '显示确定按钮的句柄

End Sub

生成12345exe

关闭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

然后先运行 事先生成好的12345exe

再运行后建的那个

你单击确定 就会使12345exe的确定按钮被单击 返回它的hwnd

我的方法是先找到12345exe的主窗口 然后根据主窗口的句柄获得其确定按钮的句柄 再使用sendmessage 发送模拟鼠标左键单击

VB控件的句柄 一般可用mehwnd 方法获得

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long

Private Function GetWinText(ByVal hwnd As Long) As String

GetWinText = String(1024, Chr(0))

GetWindowText hwnd, GetWinText, Len(GetWinText)

GetWinText = Left$(GetWinText, InStr(GetWinText, Chr(0)) - 1)

End Function

Private Sub Command1_Click()

Dim i As Long, j As Long, s As String

i = GetWindow(hwnd, 0&)

Do Until i = 0

If IsWindowVisible(i) Then

s = Trim(GetWinText(i))

If instr(s,"Client Ver :") Then

'这时候i就是该程序的句柄,你可以在此发送按键消息了

'或者你也可以把这个i记录下来,然后在timer中向该窗口定时发送按键消息

exit sub

End If

End If

i = GetWindow(i, 2&)

Loop

End Sub

以上就是关于VB获取指定窗口的子程序句柄全部的内容,包括:VB获取指定窗口的子程序句柄、请问VB如何获取某窗体的句柄,并向该窗口发送后台按键信息、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9571128.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存