How to Get Windows Master List (Task List) Using Visual Basic
This article is reprinted from the Microsoft Knowledge Base. To view the article, maximize your help window. This information applies to Visual Basic for Windows, versions 2.0 and 3.0.
By calling the Windows API functions GetWindow, GetWindowText, and
GetWindowTextLength, you can get the window titles of all windows
(visible and invisible) loaded under Windows. The list of all of the
window titles under Windows is known as the master list. The Windows
Task Manager contains a list of the window titles for each of the
top-level windows (normally one per application). This list is known
as the task list.
Listed below is a sample program that demonstrates how to AppActivate
an application that is available from a list of top-level windows.
The task list is generally a subset of the master list. The Windows
API functions only support methods of getting the master list, not the
task list. However, from the master list you can get a list of all
top-level windows closely resembling the task list. The only
difference is that the list containing the top-level windows may have
more entries than the task list. The reason for this is that it is
possible for an application to remove itself from the task list, but
it will be included as part of the master list.
The example below demonstrates how to get the names of all top-level
windows. The names of child windows can also be obtained by calling
the GetWindow API function with the GW_CHILD constant. Although the
code example only provides an example of using the constants
GW_HWNDFIRST and GW_HWNDNEXT as arguments to GetWindow, the value of
the other constants such as GW_CHILD are provided in the code as well.
Below are the steps necessary to construct a sample program that
demonstrates how to load the task list into a Visual Basic combo
1. Run Visual Basic, or choose New Project from the File menu (ALT, F,
N) if Visual Basic is already running. Form1 will be created by
2. Change the caption property of Form1 to AppActivate.
3. Add the following controls to Form1 and change the Names as
indicated in the chart below:
Control Default Name Name
------- ------------ -------
Label Control Label1 Label1
Combo Box Combo1 Combo_ListItem
Command Button Command1 Command_Ok
4. Change the Caption properties of the controls as follows:
Control CtlName Caption
------- ------- ---------
Label Control Label1 Application to AppActivate:
Command Button Command_OK OK
5. Add the following code to the general declarations section of
'* Windows API function declarations
Declare Function GetWindow Lib "user" (ByVal hWnd, ByVal wCmd) As
Declare Function GetWindowText Lib "user" (ByVal hWnd, ByVal
lpSting$, ByVal nMaxCount) As Integer
Declare Function GetWindowTextLength Lib "user" (ByVal hWnd)
'Declare constants used by GetWindow
Const GW_CHILD = 5
Const GW_HWNDFIRST = 0
Const GW_HWNDLAST = 1
Const GW_HWNDNEXT = 2
Const GW_HWNDPREV = 3
Const GW_OWNER = 4
6. Add the following code in the Form_Load event procedure of Form1:
Sub Form_Load ()
'Check to see if any items are in the task list, if
'not end the program.
If Combo_ListItem.ListCount > 0 Then
Combo_ListItem.Text = Combo_ListItem.List(0)
MsgBox "Nothing found in task list", 16, "AppActivate"
7. Enter the following code in the Click event procedure of the
Sub Command_Ok_Click ()
'Get the item selected from the text portion of the
f$ = Combo_ListItem.Text
'Simply resume if an "Illegal function call" occurs on
'the AppActivate statement.
On Local Error Resume Next
8. Enter the following code under the general declarations section of
Sub LoadTaskList ()
'Get the hWnd of the first item in the master list
'so we can process the task list entries (top-level only).
CurrWnd = GetWindow(Form1.hWnd, GW_HWNDFIRST)
' Loop while the hWnd returned by GetWindow is valid.
While CurrWnd <> 0
'Get the length of the task name identified by
'CurrWnd in the list.
Length = GetWindowTextLength(CurrWnd)
'Get the task name of the task in the master list.
ListItem$ = Space$(Length + 1)
Length = GetWindowText(CurrWnd, ListItem$, Length + 1)
'If there is an actual task name in the list, add the
'item to the list.
If Length > 0 Then
'Get the next task list item in the master list.
CurrWnd = GetWindow(CurrWnd, GW_HWNDNEXT)
'Process Windows events.
x = DoEvents()
9. From the Run menu, choose Start (ALT, R, S) to run the program.
From the combo box, select the window title of an application
currently running under Windows. Choose the OK button to activate the