在控制台上尝试子类化
我想在控制台应用程序中捕获键盘消息,所以我尝试了这个:
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);
这个全球WNDPROC OldConsoleProc;
: WNDPROC OldConsoleProc;
但它不起作用,我做错了什么?
您不能以这种方式子类化另一个进程的窗口。 你可以用钩子做,但我不建议在控制台窗口上尝试这个。 ReadConsoleInput
足够低,只要你能得到没有丑陋的非便携式黑客攻击(我甚至不确定当控制台窗口全屏时有一些事件到达WndProc
)。