News:

This week IPhone 15 Pro winner is karn
You can be too a winner! Become the top poster of the week and win valuable prizes.  More details are You are not allowed to view links. Register or Login 

Main Menu

HOWTO: Get a Hierarchical List of Window Names and Classes

Started by ben2ong2, October 07, 2006, 04:56:15 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ben2ong2

PRODUCT :Microsoft Visual Basic for Windows
PROD/VER:4.0 5.0 7.0 97
OPER/SYS:WINDOWS
KEYWORDS:APrgWindow kbcode vb432 vb4win vb5all vb5howto VBKBWinAPI kbhowto

======================================================================
---------------------------------------------------------------------
The information in this article applies to:

- Microsoft Visual Basic Control Creation, Learning, Professional, and
   Enterprise Editions for Windows, version 5.0
- Microsoft Visual Basic Standard, Professional, and Enterprise Editions,
   32-bit only, for Windows, version 4.0
- Microsoft Access versions 7.0, 97
---------------------------------------------------------------------

SUMMARY
=======

When trying to determine whether a child window of an application is open,
you need to know whether it is a child of the main application window, a
grandchild, or an independent window. This article provides a method of
creating a hierarchical listing of all currently open windows and their
window class names, making it easier navigating a program's window
hierarchy.

MORE INFORMATION
================

WARNING: Microsoft provides code examples for illustration only, without
warranty either expressed or implied, including but not limited to the
implied warranties of merchantability and/or fitness for a particular
purpose. This code is provided 'as is' and Microsoft does not guarantee
that the following code can be used in all situations. Microsoft does not
support modifications of the code to suit customer requirements for a
particular purpose.

Step-by-Step Example
--------------------

1. Create a new project with a Form and a Module.

2. Add the following controls to the form:

   Control            Name         Property   Value
   ------------------------------------------------
   Command button     Command1
   Text box           Text1        MultiLine  TRUE
   Text box           Text1        Scrollbars 2- Vertical

   NOTE: The MultiLine property only applies to Visual Basic.

3. Type the following code into the module:

      Option Explicit
   
      Public Const GW_CHILD = 5
      Public Const GW_HWNDNEXT = 2
   
      Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, _
              ByVal wCmd As Long) As Long
      Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
              (ByVal hwnd As Long, ByVal lpString As String, _
              ByVal cch As Long) As Long
      Declare Function GetTopWindow Lib "user32" _
              (ByVal hwnd As Long) As Long
      Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
              (ByVal hwnd As Long, ByVal lpClassName As String, _
              ByVal nMaxCount As Long) As Long

4. Add the following code to the form's module:

      Sub AddChildWindows(ByVal hwndParent As Long, ByVal Level As Long)
      Dim WT As String, CN As String, Length As Long, hwnd As Long
        If Level = 0 Then
          hwnd = hwndParent
        Else
          hwnd = GetWindow(hwndParent, GW_CHILD)
        End If
        Do While hwnd <> 0
          WT = Space(256)
          Length = GetWindowText(hwnd, WT, 255)
          WT = Left$(WT, Length)
          CN = Space(256)
          Length = GetClassName(hwnd, CN, 255)
          CN = Left$(CN, Length)
          Me!Text1 = Me!Text1 & vbCrLf & String(2 * Level, ".") _
                   & WT & " (" & CN & ")"
          AddChildWindows hwnd, Level + 1
          hwnd = GetWindow(hwnd, GW_HWNDNEXT)
        Loop
      End Sub
   
      Sub Command1_Click()
      Dim hwnd As Long
        hwnd = GetTopWindow(0)
        If hwnd <> 0 Then
          AddChildWindows hwnd, 0
        End If
      End Sub

5. Visual Basic only: Run the project.

   Access only: Open the form.

6. Click the CommandButton. The text box will be filled with a list of
   windows and their children arranged in a hierarchical order. The class
   name will follow the window name, such as:

      MainWindowName (WindowClass)
      ..ChildWindowName (WindowClass)
      ....GrandchildWindowName (WindowClass)

NOTE: Not all windows will have a name but all will have a Window Class.

REFERENCES
==========

Microsoft Windows SDK
======================================================================
Keywords            : APrgWindow kbcode vb432 vb4win vb5all vb5howto VBKBWinAPI kbhowto
Version             : 4.0 5.0 7.0 97
Platform            : WINDOWS

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS
PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.  MICROSOFT DISCLAIMS
ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO
EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR
ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL,
CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF
MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.  SOME STATES DO NOT ALLOW THE EXCLUSION
OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES
SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1997.
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login