Jim Dettman
jimdettman at verizon.net
Mon May 23 09:57:42 CDT 2011
<<What I want to know is how does he figure out the name of the objects? for example...>> One way is to enumerate all the child windows when something is running: Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, _ ByVal lParam As Long) As Long Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As _ Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long ' The following variables are shared between the main ChildWindows procedure ' and the auxiliary (private) ChildWindows_CBK routine ' An array of Long holding the handle of all child windows. Dim windows() As Long ' The number of elements in the array. Dim windowsCount As Long Sub getWindows() Dim lnghwnd As Long lnghwnd = CLng(Application.hWndAccessApp) Debug.Print ChildWindows(lnghwnd) End Sub ' Return an array of Long holding the handles of all the child windows ' of a given window. If hWnd = 0 it returns all the top-level windows. Function ChildWindows(ByVal hWnd As Long) windowsCount = 0 If hWnd Then EnumChildWindows hWnd, AddressOf EnumWindows_CBK, 1 Else EnumWindows AddressOf EnumWindows_CBK, 1 End If ' Trim uninitialized elements and return to caller. ReDim Preserve windows(windowsCount) As Long End Function ' The callback routine, common to both EnumWindows and EnumChildWindows. Private Function EnumWindows_CBK(ByVal hWnd As Long, ByVal lParam As Long) As _ Long Dim slength As Long Dim buffer As String Dim retval As Variant Dim classname As String ' Make room in the array, if necessary. If windowsCount = 0 Then ReDim windows(100) As Long ElseIf windowsCount >= UBound(windows) Then ReDim Preserve windows(windowsCount + 100) As Long End If ' Store the new item. windowsCount = windowsCount + 1 windows(windowsCount) = hWnd slength = GetWindowTextLength(hWnd) + 1 ' get length of title bar text buffer = Space(slength) ' make room in the buffer retval = GetWindowText(hWnd, buffer, slength) ' get title bar text Debug.Print "Window #"; windowsCount ' display number of enumerated window Debug.Print "Handle: "; hWnd Debug.Print ; "Title:"; Left(buffer, slength - 1) ' display title bar text of enumerated window classname = Space(255) slength = GetClassName(hWnd, classname, 255) classname = Left(classname, slength) ' remove empty space Debug.Print ; "Class: "; classname Debug.Print ' Return 1 to continue enumeration. EnumWindows_CBK = 1 End Function <<snip>>