Hola, al parecer esta mal el FindWindowEx, el nombre de clase va en el primer parametro...aca te paso un ejemplo de lo que queres en visual basic 6, facil de pasar a .NET.
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Const WM_GETTEXT = &HD
Private Sub Command1_Click()
Dim vHwndPadre As Long, vHwndHijo As Long, vHwndHijo2 As Long
Dim vTexto As String * 256
vHwndPadre = FindWindow("#32770", vbNullString)
vHwndHijo = FindWindowEx(vHwndPadre, 0, "Static", vbNullString)
vHwndHijo2 = FindWindowEx(vHwndPadre, vHwndHijo, "Static", vbNullString)
Call SendMessage(vHwndHijo2, WM_GETTEXT, 256, vTexto)
MsgBox vTexto
End Sub
lo probe con un mensaje de windows simulando un mensaje de error.
saludos.