【发布时间】:2013-02-09 12:25:58
【问题描述】:
我想在控制台应用程序中捕获键盘消息,所以我尝试了这个:
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;
但它不起作用,我做错了什么?
【问题讨论】:
-
“它不起作用”是什么意思?你期望什么行为,你观察到什么?
-
您不需要使用
FindWindow搜索来获取控制台窗口句柄 - 只需使用GetConsoleWindow(从 Vista 开始)。