vb如何获取某程序的全部句柄

vb如何获取某程序的全部句柄,第1张

'创裤李建一个列表框和一个按钮

'API函数定义

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 ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

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

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Const GW_HWNDFIRST = 0

Const GW_HWNDNEXT = 2

Private Sub Command1_Click()

Dim s As Long

Dim a As String

a = Space(255)

s = GetWindow(Me.hwnd, GW_HWNDFIRST) '获得句孝稿柄

GetWindowText s, a, 255'获得标题

Dim ab As String * 255

GetClassName s, ab, 255'获得类胡慎迟名

Dim ClassName As String

ClassName = StripTerFlag(ab) 'StripTerFlag是一个自定义函数,后面有代码,用于去处结束符

If UCase(ClassName) = "NOTEPAD" Then

List1.AddItem a

List1.ItemData(List1.ListCount - 1) = s

End If

Do While s

DoEvents

s = GetWindow(s, GW_HWNDNEXT) '获得句柄

GetWindowText s, a, 255 '获得标题

GetClassName s, ab, 255 '获得类名

ClassName = StripTerFlag(ab)

If UCase(ClassName) = "NOTEPAD" Then

List1.AddItem a

List1.ItemData(List1.ListCount - 1) = s

End If

Loop

End Sub

Private Sub List1_Click()

MsgBox List1.ItemData(List1.ListIndex) '单击列表框获得句柄

End Sub

如果窗口是现有程序的,使用VS自带的spy++获取窗口的相关信息,然後使用WinAPI获取句柄,具体参考spy++的使用方法和迹简指winapi的使用

FindWindow(

lpClassName, {窗口的类名姿配}

lpWindowName: PChar {窗口的标题}

): HWND{返回窗口的句咐嫌柄失败返回 0}

//FindWindowEx 比 FindWindow 多出两个句柄参数:

FindWindowEx(

Parent: HWND{要查找子窗口的父窗口句柄}

Child: HWND{子窗口句柄}

ClassName: PChar{}

WindowName: PChar {}

): HWND

如果窗口是你的程序动态生成的,使用如下语句

Form _FORM=new Form()

IntPtr _P = _FORM.Handle

_P就是你实例化的窗口句柄


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

原文地址: http://outofmemory.cn/yw/12389617.html

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

发表评论

登录后才能评论

评论列表(0条)

保存