我想在控制台应用程序中捕获键盘消息,所以我尝试了这个:
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;
但它不起作用,我做错了什么?
答案 0 :(得分:2)
您不能以这种方式为另一个进程的子窗口创建子类。 You can do it with hooks但我不建议在控制台窗口上尝试此操作。 ReadConsoleInput
是低级别的,只要你能得到没有丑陋的非便携式黑客攻击(我甚至不确定是某些事件在控制台到达WndProc
时窗口是全屏的。)