Я хочу помечать сообщения клавиатуры в консольном приложении, поэтому я попробовал это:
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
когда окно консоли полно).