Уважаемый Vadim, слепил я из Вашего кода вот такую функцию:
- Код: Выделить всё
- function GetConsoleHwnd:HWND;
 var h: HWND;
 function EnumWndProc(h:HWND; l:LPARAM): BOOL; stdcall;
 begin
 if GetWindowThreadProcessId(h, NIL) = GetCurrentThreadId() then
 EnumWndProc:=FALSE;
 else
 EnumWndProc:=TRUE;
 end;
 begin
 EnumWindows(@EnumWndProc, LPARAM(h));
 end;
Она не компилируется, компилятор пишет ошибку:
Error: Incompatible type for arg no. 1: Got "<address of function(LongWord,LongInt):LongBool is nested;StdCall>", expected "<procedure variable type of function(LongWord,LongInt):LongBool;StdCall>"
bormant писал(а):Чтобы h после вызова содержало дескриптор найденного окна, его надо присвоить внутри EnumWndProc. Поскольку это функция обратного вызова, самым простым будет передать во втором параметре адрес h, а внутри выполнить присваивание найденного HWND, используя параметр как указатель на HWND.
Мой уровень знаний WinApi находится на уровне чайника  

Не могли бы Вы более 
конкретно "ткнуть меня носом"?