在控制台上尝试子类化

时间:2013-02-09 12:25:59

标签: c winapi

我想在控制台应用程序中捕获键盘消息,所以我尝试了这个:

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;

但它不起作用,我做错了什么?

1 个答案:

答案 0 :(得分:2)

您不能以这种方式为另一个进程的子窗口创建子类。 You can do it with hooks但我不建议在控制台窗口上尝试此操作。 ReadConsoleInput是低级别的,只要你能得到没有丑陋的非便携式黑客攻击(我甚至不确定某些事件在控制台到达WndProc时窗口是全屏的。)