遍曆當前windows的所有視窗
以下模組:
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返回值也可以,只是函數堶惟w義就多了,總的來看需要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
|