ウインドウの列挙

今回はリストボックスを使用しています。リストボックスの基本的な使い方については、他のサイトに腐るほどあるので、ここでいちいち解説はしません。
ここでは、ウインドウの列挙(EnumWindows関数を使用)を説明します。
EnumWindows関数は以下のようなものです。
EnumWindows(コールバック関数のアドレス , コールバック関数に渡す値)

ウインドウを見つけて、コールバック関数を呼び出します。
呼び出されたコールバック関数の戻り値がTRUEであれば列挙を続けます。

コールバック関数の名前は特に決まっていません。分かりやすい名前を付けると良いでしょう。
Function 関数の名前(見つかったウインドウハンドル , EnumWindowsで指定した値) As Long

ウインドウハンドルが見つかったら呼び出されます。
1つ目の引数に見つかったウインドウハンドルが入っています。
戻り値をTRUEにすれば列挙を続けます。

今回はプロジェクトを作成します。作るのはリストボックスだけです。IDはListBox1のままにしておきます。
'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Declare Function EnumWindows Lib"User32" (lpEnumFunc As HWND , lp As DWord) As Long

Dim hList As HWND 'リストボックスのハンドル

'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数

Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
    ' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。

    ' イベントプロシージャの呼び出しを行います。
    MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
    WDEL_DestroyObjects()
    PostQuitMessage(0)
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)

    hList  = GetDlgItem(hMainWnd , ListBox1)
    'ウインドウを列挙し、リストボックスに入れる
    EnumWindows(AddressOf(EnumWndProc) , 0)
End Sub

'コールバック関数
Function EnumWndProc(hWnd As HWND , lp As DWord) As Long
    'リストボックスにウインドウのタイトルを入れる
    Dim buf[200] As Byte
    GetWindowText(hWnd , buf , 200)
    If buf[0] <> 0 Then '名無しウインドウでなければ
        SendMessage( hList , LB_ADDSTRING ,  0 , buf)
    End If
    EnumWndProc = TRUE'列挙を続けるならTRUE、やめるならFALSE
End Function
実行結果
これだけでは何の役にも立ちません。
更新や、ウインドウを閉じる機能、等があればまともなソフトになるでしょう。