2013-02-09 2 views
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); 

и этой глобальной Var: WNDPROC OldConsoleProc;

но он не работает, что я делаю неправильно?

+2

Что значит «это не работает?» Какое поведение вы ожидали и что вы наблюдали? –

ответ

2

Вы не можете подклассифицировать окно другого процесса таким образом. You can do it with hooks, но я бы не рекомендовал попробовать это на окне консоли. ReadConsoleInput достаточно низкоуровневый, и это настолько далеко, насколько вы можете получить без уродливых непереносимых хаков (я даже не уверен, что некоторые события достигают WndProc, когда консольное окно полноэкранное).

+0

Большое спасибо, это работает .. – PieThon

Смежные вопросы