End FunctionPrivate Sub FindWnd() Dim TemphWnd As Long Dim TempLI As ListItem
LV1.ListItems.Clear
TemphWnd = hWndDir Set TempLI = LV1.ListItems.Add(, , ".") TempLI.SubItems(1) = TemphWnd TempLI.SubItems(2) = GetClassNameStr(TemphWnd) TempLI.SubItems(3) = GetDlgCtrlID(TemphWnd) LV1_ItemClick TempLI
TemphWnd = GetParent(hWndDir) If TemphWnd = 0 Then TemphWnd = GetWindow(hWndDir, GW_OWNER) If TemphWnd Then Set TempLI = LV1.ListItems.Add(, , "..") TempLI.SubItems(1) = TemphWnd TempLI.SubItems(2) = GetClassNameStr(TemphWnd) TempLI.SubItems(3) = GetDlgCtrlID(TemphWnd) End If CmdUp.Enabled = TemphWnd
TemphWnd = GetWindow(hWndDir, GW_CHILD) TemphWnd = GetWindow(TemphWnd, GW_HWNDFIRST) Do While TemphWnd Set TempLI = LV1.ListItems.Add(, , GetCaption(TemphWnd)) TempLI.SubItems(1) = TemphWnd TempLI.SubItems(2) = GetClassNameStr(TemphWnd) TempLI.SubItems(3) = GetDlgCtrlID(TemphWnd)
TemphWnd = GetWindow(TemphWnd, GW_HWNDNEXT)
Loop
End SubPrivate Sub CmdMe_Click() hWndDir = GetDesktopWindow FindWnd
End SubPrivate Sub CmdOpen_Click() LV1_DblClick
End SubPrivate Sub CmdSX_Click() FindWnd End SubPrivate Sub CmdUp_Click() Dim TemphWnd As Long
TemphWnd = GetParent(hWndDir) If TemphWnd = 0 Then TemphWnd = GetWindow(hWndDir, GW_OWNER) If TemphWnd Then hWndDir = TemphWnd FindWnd End If
End SubPrivate Sub LV1_DblClick() Dim TempLI As ListItem Dim TemphWnd As Long
If LVB = 1 Then 'Debug.Print "1" Set TempLI = LV1.SelectedItem If (TempLI Is Nothing) = False Then 'Debug.Print "2" If TempLI.Text <> "." Then 'Debug.Print "3" TemphWnd = CLng(TempLI.SubItems(1))
If GetWindow(TemphWnd, GW_CHILD) Then 'Debug.Print "4" hWndDir = TemphWnd FindWnd
End If
End If
End If
End If
End SubPrivate Sub LV1_ItemClick(ByVal Item As MSComctlLib.ListItem) Dim TemphWnd As Long Dim rct As RECT
二,我就是要查这几个API 函数的用法啊是查窗体上的控件的ID,以及窗体的叵柄
多谢谢大家指教啊
====================================================================
Type=Exe
Form=FrmMain.frm
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\..\WINDOWS\SYSTEM\StdOle2.Tlb#OLE Automation
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
IconForm="FrmMain"
Startup="FrmMain"
ExeName32="FindhWnd.exe"
Command32=""
Name="FindhWnd"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="91"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
====================================================================
VERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Begin VB.Form FrmMain
Caption = "查找窗口"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 4680
LinkTopic = "Form1"
LockControls = -1 'True
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 3 '窗口缺省
Begin VB.CommandButton CmdOpen
Caption = "打开"
Height = 300
Left = 2550
TabIndex = 21
Top = 0
Width = 840
End
Begin VB.Frame FraInfo
Caption = "信息"
Height = 1455
Left = 0
TabIndex = 4
Top = 1710
Width = 4635
Begin VB.TextBox TxtH
Height = 270
Left = 3825
TabIndex = 19
Text = "Text1"
Top = 1110
Width = 750
End
Begin VB.TextBox TxtW
Height = 270
Left = 2640
TabIndex = 17
Text = "Text1"
Top = 1110
Width = 750
End
Begin VB.TextBox TxtY
Height = 270
Left = 1350
TabIndex = 15
Text = "Text1"
Top = 1110
Width = 750
End
Begin VB.TextBox TxtID
Height = 270
Left = 2820
TabIndex = 13
Text = "Text1"
Top = 510
Width = 1750
End
Begin VB.TextBox TxtX
Height = 270
Left = 300
TabIndex = 11
Text = "Text1"
Top = 1110
Width = 750
End
Begin VB.TextBox TxtClass
Height = 270
Left = 540
TabIndex = 9
Text = "Text1"
Top = 810
Width = 4035
End
Begin VB.TextBox TxthWnd
Height = 270
Left = 540
TabIndex = 7
Text = "Text1"
Top = 510
Width = 1750
End
Begin VB.TextBox TxtCap
Height = 270
Left = 540
TabIndex = 5
Text = "Text1"
Top = 210
Width = 4035
End
Begin VB.Label LblH
AutoSize = -1 'True
Caption = "高:"
Height = 180
Left = 3480
TabIndex = 20
Top = 1170
Width = 360
End
Begin VB.Label LblW
AutoSize = -1 'True
Caption = "宽:"
Height = 180
Left = 2310
TabIndex = 18
Top = 1170
Width = 360
End
Begin VB.Label LblY
AutoSize = -1 'True
Caption = "Y:"
Height = 180
Left = 1110
TabIndex = 16
Top = 1170
Width = 270
End
Begin VB.Label LblID
AutoSize = -1 'True
Caption = " ID:"
Height = 180
Left = 2340
TabIndex = 14
Top = 570
Width = 540
End
Begin VB.Label LblX
AutoSize = -1 'True
Caption = "X:"
Height = 180
Left = 60
TabIndex = 12
Top = 1170
Width = 270
End
Begin VB.Label LblClass
AutoSize = -1 'True
Caption = "类名:"
Height = 180
Left = 60
TabIndex = 10
Top = 870
Width = 540
End
Begin VB.Label LblhWnd
AutoSize = -1 'True
Caption = "hWnd:"
Height = 180
Left = 60
TabIndex = 8
Top = 570
Width = 540
End
Begin VB.Label LblCap
AutoSize = -1 'True
Caption = "标题:"
Height = 180
Left = 60
TabIndex = 6
Top = 270
Width = 540
End
End
Begin VB.CommandButton CmdUp
Caption = "向上"
Height = 300
Left = 1710
TabIndex = 3
Top = 0
Width = 840
End
Begin VB.CommandButton CmdMe
Caption = "恢复"
Height = 300
Left = 840
TabIndex = 2
Top = 0
Width = 840
End
Begin VB.CommandButton CmdSX
Caption = "刷新"
Height = 300
Left = 0
TabIndex = 1
Top = 0
Width = 840
End
Begin MSComctlLib.ListView LV1
Height = 1395
Left = 0
TabIndex = 0
Top = 300
Width = 2745
_ExtentX = 4842
_ExtentY = 2461
LabelEdit = 1
LabelWrap = -1 'True
HideSelection = 0 'False
FullRowSelect = -1 'True
GridLines = -1 'True
_Version = 393217
ForeColor = -2147483640
BackColor = -2147483643
BorderStyle = 1
Appearance = 1
NumItems = 0
End
End
Attribute VB_Name = "FrmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Const GW_HWNDFIRST = 0 '为一个源子窗口寻找第一个兄弟(同级)窗口,或寻找第一个顶级窗口
Private Const GW_HWNDLAST = 1 '为一个源子窗口寻找最后一个兄弟(同级)窗口,或寻找最后一个顶级窗口
Private Const GW_HWNDNEXT = 2 '为源窗口寻找下一个兄弟窗口
Private Const GW_HWNDPREV = 3 '为源窗口寻找前一个兄弟窗口
Private Const GW_OWNER = 4 '寻找窗口的所有者
Private Const GW_CHILD = 5 '寻找源窗口的第一个子窗口Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As LongPrivate Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch 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
Private Declare Function GetDlgCtrlID Lib "user32" (ByVal hWnd As Long) As LongPrivate Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As LongPrivate Type RECT
Left As Long
Top As Long
Right As Long
Public Function GetCaption(hWnd As Long) As String
Dim TempLng As Long
Dim TempStr As String
Dim Rc As Long
TempLng = 260
TempStr = Space(TempLng)
Rc = GetWindowText(hWnd, TempStr, TempLng)
GetCaption = StrConv(LeftB$(StrConv(TempStr, vbFromUnicode), Rc), vbUnicode)
End FunctionPublic Function GetClassNameStr(hWnd As Long) As String
Dim TempLng As Long
Dim TempStr As String
Dim Rc As Long
TempLng = 260
TempStr = Space(TempLng)
Rc = GetClassName(hWnd, TempStr, TempLng)
GetClassNameStr = StrConv(LeftB$(StrConv(TempStr, vbFromUnicode), Rc), vbUnicode)
End FunctionPrivate Sub FindWnd()
Dim TemphWnd As Long
Dim TempLI As ListItem
LV1.ListItems.Clear
TemphWnd = hWndDir
Set TempLI = LV1.ListItems.Add(, , ".")
TempLI.SubItems(1) = TemphWnd
TempLI.SubItems(2) = GetClassNameStr(TemphWnd)
TempLI.SubItems(3) = GetDlgCtrlID(TemphWnd)
LV1_ItemClick TempLI
TemphWnd = GetParent(hWndDir)
If TemphWnd = 0 Then TemphWnd = GetWindow(hWndDir, GW_OWNER)
If TemphWnd Then
Set TempLI = LV1.ListItems.Add(, , "..")
TempLI.SubItems(1) = TemphWnd
TempLI.SubItems(2) = GetClassNameStr(TemphWnd)
TempLI.SubItems(3) = GetDlgCtrlID(TemphWnd)
End If
CmdUp.Enabled = TemphWnd
TemphWnd = GetWindow(hWndDir, GW_CHILD)
TemphWnd = GetWindow(TemphWnd, GW_HWNDFIRST)
Do While TemphWnd
Set TempLI = LV1.ListItems.Add(, , GetCaption(TemphWnd))
TempLI.SubItems(1) = TemphWnd
TempLI.SubItems(2) = GetClassNameStr(TemphWnd)
TempLI.SubItems(3) = GetDlgCtrlID(TemphWnd)
TemphWnd = GetWindow(TemphWnd, GW_HWNDNEXT)
Loop
End SubPrivate Sub CmdMe_Click()
hWndDir = GetDesktopWindow
FindWnd
End SubPrivate Sub CmdOpen_Click()
LV1_DblClick
End SubPrivate Sub CmdSX_Click()
FindWnd
End SubPrivate Sub CmdUp_Click()
Dim TemphWnd As Long
TemphWnd = GetParent(hWndDir)
If TemphWnd = 0 Then TemphWnd = GetWindow(hWndDir, GW_OWNER)
If TemphWnd Then
hWndDir = TemphWnd
FindWnd
End If
End SubPrivate Sub Form_Load()
LV1.View = lvwReport
LV1.ColumnHeaders.Add , , "标题", 1200
LV1.ColumnHeaders.Add , , "hWnd", 540
LV1.ColumnHeaders.Add , , "类名", 2100
LV1.ColumnHeaders.Add , , "ID", 420
CmdMe_Click
End SubPrivate Sub Form_Resize()
If Me.WindowState = 1 Then Exit Sub
On Error Resume Next
LV1.Width = Me.ScaleWidth
LV1.Height = Me.ScaleHeight - 300 - FraInfo.Height
FraInfo.Top = LV1.Height + 300
FraInfo.Width = Me.ScaleWidth
'FraInfo.Height = LV1.Height
End SubPrivate Sub LV1_DblClick()
Dim TempLI As ListItem
Dim TemphWnd As Long
If LVB = 1 Then
'Debug.Print "1"
Set TempLI = LV1.SelectedItem
If (TempLI Is Nothing) = False Then
'Debug.Print "2"
If TempLI.Text <> "." Then
'Debug.Print "3"
TemphWnd = CLng(TempLI.SubItems(1))
If GetWindow(TemphWnd, GW_CHILD) Then
'Debug.Print "4"
hWndDir = TemphWnd
FindWnd
End If
End If
End If
End If
End SubPrivate Sub LV1_ItemClick(ByVal Item As MSComctlLib.ListItem)
Dim TemphWnd As Long
Dim rct As RECT
TemphWnd = CLng(Item.SubItems(1))
GetWindowRect TemphWnd, rct
TxtCap.Text = GetCaption(TemphWnd)
TxthWnd.Text = TemphWnd
TxtID.Text = GetDlgCtrlID(TemphWnd)
TxtClass.Text = GetClassNameStr(TemphWnd)
TxtX.Text = rct.Left
TxtY.Text = rct.Top
TxtW.Text = rct.Right - rct.Left
TxtH.Text = rct.Bottom - rct.Top
CmdOpen.Enabled = GetWindow(TemphWnd, GW_CHILD)
End SubPrivate Sub LV1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
LVB = 1
LV1_DblClick
LVB = 0
End If
End SubPrivate Sub LV1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
LVB = Button
LVX = x
LVY = y
End Sub