Попытка подclassа на консоли

Я хочу помечать сообщения клавиатуры в консольном приложении, поэтому я попробовал это:

HWND GetConsoleHwnd(void) { #define SIZEBUF 1024 char szBuffer[SIZEBUF]; GetConsoleTitle(szBuffer, SIZEBUF); #undef SIZEBUF return FindWindow(NULL, szBuffer); } LRESULT CALLBACK ConsoleProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_KEYDOWN: switch (wParam) { //VK Cases } break; } return CallWindowProc(OldConsoleProc, hwnd, msg, wParam, lParam); } 

это в основном:

 HWND hwndConsole = GetConsoleHwnd(); OldConsoleProc = (WNDPROC) SetWindowLong(hwndConsole, GWL_WNDPROC, ConsoleProc); 

и этот глобальный Var: WNDPROC OldConsoleProc;

но он не работает, что я делаю неправильно?

Вы не можете подclassифицировать окно другого процесса таким образом. Вы можете сделать это с помощью крючков, но я бы не рекомендовал попробовать это в окне консоли. ReadConsoleInput достаточно низкоуровневый, и вы можете получить без уродливых непереносимых хаков (я даже не уверен, что есть некоторые события, достигающие WndProc когда окно консоли полно).