我就是用这个方式处理的 '┏〓〓〓〓〓〓〓〓〓 FindHwndByClassAndId,start 〓〓〓〓〓〓〓〓〓┓ '[简介]: '查找窗体中多层次下第几个相同类的句柄 Function FindHwndByClassAndId(WinHwnd As Long, ByVal Class As String, Optional FindId As Integer, Optional Id As Integer) As Long '[mycode_id:1934],edittime:2011/8/3 3:30:07 Dim Hwnd2 As Long Dim FindHwnd As Long, TempFindHwnd As Long Hwnd2 = GetWindow(WinHwnd, GW_CHILD) While FindHwnd = 0 And Hwnd2 > 0 If GetClass(Hwnd2) = Class Then TempFindHwnd = Hwnd2
If Id = FindId Then FindHwnd = TempFindHwnd GoTo DoEnd Else Id = Id + 1 End If End If
另外贡献个使用我之前的clsWindows框架的方法,很简便: Dim w As New clsWindow If w.GetWindowHwndByTitleEx("应用程序标题栏文字") > 0 Then MsgBox w.GetElementHwndByClassName("Internet Explorer_Server") '得到ie控件句柄 End If
有时你指定类还不行,全用NULL反倒行,再按所得到的所有HWND,得到其CLASS,进行比较
'┏〓〓〓〓〓〓〓〓〓 FindHwndByClassAndId,start 〓〓〓〓〓〓〓〓〓┓
'[简介]:
'查找窗体中多层次下第几个相同类的句柄
Function FindHwndByClassAndId(WinHwnd As Long, ByVal Class As String, Optional FindId As Integer, Optional Id As Integer) As Long
'[mycode_id:1934],edittime:2011/8/3 3:30:07
Dim Hwnd2 As Long
Dim FindHwnd As Long, TempFindHwnd As Long
Hwnd2 = GetWindow(WinHwnd, GW_CHILD)
While FindHwnd = 0 And Hwnd2 > 0
If GetClass(Hwnd2) = Class Then
TempFindHwnd = Hwnd2
If Id = FindId Then
FindHwnd = TempFindHwnd
GoTo DoEnd
Else
Id = Id + 1
End If
End If
FindHwnd = FindHwndByClassAndId(Hwnd2, Class, FindId, Id)
Hwnd2 = GetWindow(Hwnd2, GW_HWNDNEXT)
Wend
DoEnd:
FindHwndByClassAndId = FindHwnd
End Function
'┗〓〓〓〓〓〓〓〓〓 FindHwndByClassAndId,end 〓〓〓〓〓〓〓〓〓┛
另外贡献个使用我之前的clsWindows框架的方法,很简便:
Dim w As New clsWindow
If w.GetWindowHwndByTitleEx("应用程序标题栏文字") > 0 Then
MsgBox w.GetElementHwndByClassName("Internet Explorer_Server") '得到ie控件句柄
End If
CString cc=dm.EnumWindow(0,_T(""),_T("Internet Explorer_Server"),2+16);
把cc转换成int,这个int就是句柄了