问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样遍历所有系统内所有正在使用的窗口,获得句柄

发布网友 发布时间:2022-04-28 12:55

我来回答

1个回答

热心网友 时间:2023-09-06 17:19

以下模块:
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 GetParent Lib "user32" (ByVal hwnd 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 GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

'自定义数据类型
Public Type mType
fhwnd As Long '窗口句柄
fText As String * 255 '窗口标题
fRect As RECT '窗口矩形
pHwnd As Long '父窗句柄
pText As String * 255 '父窗标题
End Type

'获取控件信息,写成SUB了,其实用FUNCTION返回值也可以,只是函数里面定义就多了,总的来看需要2个mType数组,这样做只需要一个,占用空间小了
Public Sub mGetAllWindow(m_Type() As mType)

Dim Wndback As Long '上一个被查找的目标句柄
Dim i As Long '数组控制

Do
ReDim Preserve m_Type(i)
DoEvents
'获取hwnd,第一个参数指定为0,查找桌面子窗口,第2个参数是开始查找的窗口,第34个参数使函数查找所有窗口
m_Type(i).fhwnd = FindWindowEx(0, Wndback, vbNullString, vbNullString)

If m_Type(i).fhwnd = 0 Then '=0时已经查找一遍了,退出
Exit Sub
Else '否则获取控件相关消息
'获取标题
GetWindowText m_Type(i).fhwnd, m_Type(i).fText, 255
'获取RECT
GetWindowRect m_Type(i).fhwnd, m_Type(i).fRect
'获取父HWND
m_Type(i).pHwnd = GetParent(m_Type(i).fhwnd)
'获取父标题
GetWindowText m_Type(i).pHwnd, m_Type(i).pText, 255
End If
Wndback = m_Type(i).fhwnd '保存上一个查的句柄
i = i + 1
Loop
End Sub

以下在窗体:(添加一个LISTVIEW1,一个COMMAND1)

Private Sub Command1_Click()

Dim cType() As mType
mGetAllWindow cType()

Dim i As Long

ListView1.ListItems.Clear

For i = LBound(cType) To UBound(cType)
ListView1.ListItems.Add , "a" & i, cType(i).fhwnd
ListView1.ListItems("a" & i).SubItems(1) = cType(i).fText
ListView1.ListItems("a" & i).SubItems(2) = cType(i).fRect.Left
ListView1.ListItems("a" & i).SubItems(3) = cType(i).fRect.Bottom
ListView1.ListItems("a" & i).SubItems(4) = cType(i).fRect.Top
ListView1.ListItems("a" & i).SubItems(5) = cType(i).fRect.Right
ListView1.ListItems("a" & i).SubItems(6) = cType(i).pHwnd
ListView1.ListItems("a" & i).SubItems(7) = cType(i).pText
Next

End Sub

Private Sub Form_Load()

ListView1.ColumnHeaders.Add , , "句柄", 1200
ListView1.ColumnHeaders.Add , , "标题", 2800
ListView1.ColumnHeaders.Add , , "Rect.Left", 800
ListView1.ColumnHeaders.Add , , "Rect.Bottom", 800
ListView1.ColumnHeaders.Add , , "Rect.Top", 800
ListView1.ColumnHeaders.Add , , "Rect.Right", 800
ListView1.ColumnHeaders.Add , , "父窗句柄", 1200
ListView1.ColumnHeaders.Add , , "父窗标题", 2800

ListView1.View = lvwReport
ListView1.FullRowSelect = True
Command1.Caption = "刷新"

End Sub
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
医生你好 我脸上跟额头上面长了很多小粉刺 请问这是什么原因引起的 要... 世界上到底是先有的鸡还是先有的蛋 请问是先有蛋,还是先有鸡? Excel怎么设置行高并且垂直 晚上梦见一条又长又小的青蛇追着咬我最后被我爸爸打死了代表什么... 专业技能怎么填我来教你 QQ空间曾经有一个左右接东西 小游戏叫什么名字 帽子先生接东西游戏介绍 趣味卡车接东西游戏介绍 怀孕50天B超的表现 非模态对话框Findwindow win7怎么使用FindWindow和FindWindowEx查找窗口句丙 急!如何用findwindow函数找到所有打开的窗口,然后用sendmessag 如何使用FindWindowEx获取窗体内控件句柄 VB用FindWindowEx遍历窗口的问题 如何用findwindowex遍历某个窗口里的所有子窗口 怎么实现CSS+DIV分页效果 菜场买大头虾,总是挑超大只的,卖的人也很热心的挑大的给我。想问下大头虾是大的好还是小的好? 剪纸的起源? 债权转让通知书是怎样的 民间借贷债权转让协议怎么写 个人债权转让协议书如何写 梦见蓝色铁皮刮到我家里? 债权转让协议书怎么写? 债权转让协议书怎么写 我梦见自己刚租到一间铁皮房子,还讨价还价,是什么意思?请高人回答? 梦见把铁棍锯开两半? 春明陶瓷 高校资助在线系统申请奖学金页面的基本信息出现错误了怎么办?我申请的学籍变更已经通过,但申请页面的基_百度问一问 孩子最爱吃的素菜的家常做法大全怎么做好 VB中findwindowex函数的用法。。 关于C#中FindWindow和FindWindowEx查找子窗体的用法,求助 在VB中如何使用FindWindow或FindWindowEx函数查找某窗体句柄 c#获取窗口句柄后 如何遍历所有控件 易语言中api findwindowEx 用法 vb api 问题 两个窗口之间的联系 FindWindow和FindWindowEX到底有什么区别,EnumWindows vb 隐藏已知句柄的窗口 & vb FindWindowEx的用法 在VB中,已知主窗口句柄,如何用FindWindowEx找到第二个文本框的句柄 C# 句柄 如果名称相同怎么获取相应的窗口句柄 怎么使用FindWindowEx获取窗体内控件句柄 vb 遍历窗口下所有控件里的文字(高分) 带有图片HTML静态网页进行 480 * 800 的分页显示 大一计算机专业,接下来怎么学,学什么? 大一计算机专业都有什么课程啊? 在大一学上的计算机课都讲些什么内容,学什么? 大学计算机基础第一节课如何上,讲什么? 大学计算机系大一学什么 大一新生应该怎样计划学计算机专业 大一新生计算机学些什么