0

コンソールアプリケーションでキーボードメッセージをトラップしたいので、これを試しました:

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;

しかし、それは機能しません、私が間違っていることは何ですか?

4

1 に答える 1

2

この方法で別のプロセスのウィンドウをサブクラス化することはできません。フックを使用して実行できますが、コンソールウィンドウでこれを試すことはお勧めしません。ReadConsoleInputは十分に低レベルであり、移植性のない醜いハックなしで取得できる範囲です(コンソールウィンドウが全画面表示のときに到達するイベントがあるかどうかさえわかりません)。WndProc

于 2013-02-09T12:37:06.120 に答える