本文目录
VB用FindWindowEx遍历窗口的问题
用 API 函数 IsWindowVisible 判断窗口是否可见如窗口可见则函数返回 True (非零)Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
VB FindWindowEx
findwindow 是按窗口的标题找的你知道标题后 可以在findwindowex 函数中指定窗口的class下面的代码 ’Module1 Option ExplicitPublic Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As LongPrivate Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As LongPrivate Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As LongPrivate Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As LongPublic Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByRef lParam As Long) As LongPrivate Const MAX_PATH = 260Public g_nWndCount As LongPrivate Sub cmdEnumChild_Click() Dim lParam As Long lParam = 0 Call EnumChildWindows(GetKey(Me.lvDetail.SelectedItem.Key), AddressOf EnumChildWindowProc, lParam)End SubPublic Function EnumChildWindowProc(ByVal hwnd As Long, ByRef lParam As Long) As Long Dim nSize As Long Dim strTitle As String Dim strClassName As String lParam = 1 Call GetTitleClass(hwnd, strTitle, strClassName) If InStr(1, LCase(strTitle), "command1") 》 0 Then ’按钮的的标题 MsgBox "找到了 句柄是:" & hwnd End If EnumChildWindowProc = 1End FunctionPublic Sub GetTitleClass(ByVal hwnd As Long, Title As String, ClassName As String) Dim nSize As Long Dim strTitle As String Dim strClassName As String nSize = GetWindowTextLength(hwnd) If nSize 》 0 Then strTitle = Space(255) Call GetWindowText(hwnd, strTitle, Len(strTitle)) strTitle = Trim(strTitle) Else strTitle = "No Title" End If strClassName = Space(255) Call GetClassName(hwnd, strClassName, Len(strClassName)) strClassName = Trim(strClassName) Title = strTitle ClassName = strClassNameEnd SubForm1Private Sub cmdEnumChild_Click() Dim lParam As Long lParam = 0 Call EnumChildWindows(hPwnd, AddressOf EnumChildWindowProc, lParam) ’注意 hPwnd 是你的父窗口的句柄End Sub
关于VB的FindWindowsEx的,高人进
一、给你一个查找第N个控件hwd的函数:Function FindWnd(Phwnd As Long, ClassName As String, Index) As LongDim i As Integer, ChildHwnd As Long ChildHwnd = FindWindowEx(Phwnd, 0, ClassName, vbNullString) Do While ChildHwnd i = i + 1 If i = Index Then FindWnd = ChildHwnd Exit Do End If ChildHwnd = FindWindowEx(Phwnd, ChildHwnd, ClassName, vbNullString) LoopEnd Function二、函数调用举例:如果你要查找计算器内第4个"Button",且不管其标题,那么这样调用:dim i as long,Phwnd as longPhwnd = FindWindow(vbNullString, "计算器")i=FindWnd(Phwnd, "Button", 4)
VB中findwindowex函数的用法
FindWindowEx函数 函数功能:在窗口列表中寻找与指定条件相符的第一个子窗口 。 该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。 参数:(1)hwndParent:要查找的子窗口所在的父窗口的句柄(如果设置了hwndParent,则表示从这个hwndParent指向的父窗口中搜索子窗口)。 如果hwndParent为 0 ,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。 Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。 (2)hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndParent窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。 (3)lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。 (4)lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。 返回值:Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。 若想获得更多错误信息,请调用GetLastError函数。 声明:1.VB 声明 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 2.C# 声明 public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle); 3.VB .NET 声明 《DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)》 _ Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, _ ByVal childAfter As IntPtr, _ ByVal lclassName As String, _ ByVal windowTitle As String) As IntPtr End Function 相关例子: ’Example Name: Changing a VB Toolbar to a Rebar-Style Toolbar BAS Moduel Code Option Explicit Public Const WM_USER= &H400 Public Const TB_SETSTYLE = WM_USER + 56 Public Const TB_GETSTYLE = WM_USER + 57 Public Const TBSTYLE_FLAT = &H800 Public Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" _ (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Public 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 ’--end block--’ ’ Form Code Option Explicit Private Sub Form_Load() With Combo1 .Width = Toolbar1.Buttons("combo1").Width .Top = (Toolbar1.Height - Combo1.Height) \ 2 .Left = Toolbar1.Buttons("combo1").Left .AddItem "Black" ’ Add colours for text.