This code will fill a listbox with the caption of each open "window". This includes all programs in the task bar and any windows within those programs
In a Module
VB Code:
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long Private Const WM_GETTEXT = &HD Private aCaptions() As String Private lCount As Long Public Function GetAllCaptions() As Variant lCount = 0 Call EnumWindows(AddressOf EnumWindowsProc, 0&) If lCount Then ReDim Preserve aCaptions(lCount - 1) GetAllCaptions = IIf(lCount, aCaptions, Array()) End Function Private Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long Dim sBuffer As String * 260 If IsWindowVisible(hwnd) Then ReDim Preserve aCaptions(lCount) aCaptions(lCount) = Left(sBuffer, SendMessage(hwnd, WM_GETTEXT, 260, ByVal sBuffer)) If Len(Trim(aCaptions(lCount))) Then lCount = lCount + 1 End If EnumWindowsProc = hwnd End Function
In a form (with a List1 and a Command1)
VB Code:
Private Sub Command1_Click() Dim vCaps As Variant Dim lIndex As Long vCaps = GetAllCaptions() List1.Clear For lIndex = 0 To UBound(vCaps) List1.AddItem vCaps(lIndex) Next End Sub




Reply With Quote