我想在控制台应用程序中捕获键盘消息,所以我尝试了这个:
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;
: WNDPROC OldConsoleProc;
但它不起作用,我做错了什么?
您不能以这种方式子类化另一个进程的窗口。 你可以用钩子做,但我不建议在控制台窗口上尝试这个。 ReadConsoleInput
足够低,只要你能得到没有丑陋的非便携式黑客攻击(我甚至不确定当控制台窗口全屏时有一些事件到达WndProc
)。
以上就是c/c++开发分享在控制台上尝试子类化相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522367.html