Devi usare la API EnumWindows e il relativo delegate... non è semplicissimo, per cui posto un esempio:
codice:
        Public Delegate Function EnumWindowsCBK(ByVal hWnd As IntPtr, ByVal lParam As Integer) As Integer
        Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As EnumWindowsCBK, ByVal lParam As Integer) As Integer
'...
        EnumWindows(New EnumWindowsCBK(AddressOf ProcessWindows), 0)
'...
    Public Function ProcessWindows(ByVal hWnd As IntPtr, ByVal lParam As Integer) As Integer
        'questa funzione viene richiamata una volta per ogni top-level window; l'handle di tale finestra è situato nel parametro hWnd.
    End Function