一个控制台下接受消息的问题。。。
我想试试用控制台接收windows发来的消息。。。
我用windows程序设计那本书上的hook例子,也就是键盘钩子,每次收到消息后发送到主程序那里。。。不过在console下却没有任何作用。。。为啥:》??
hook的回调函数:
LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam){ if(nCode<0 || nCode == HC_NOREMOVE) return ::CallNextHookEx(g_hHook, nCode, wParam, lParam); if(lParam & 0x40000000)//消息重复的情况下,交给下个hook return ::CallNextHookEx(g_hHook, nCode, wParam, lParam); //通知主窗口,wParam参数为虚拟键码,lParam参数包含了它的信息 ::PostMessage(g_hWndCaller, HM_KEY, wParam, lParam); return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);}#include "hook.h"#include <iostream>using namespace std;HWND g_hwnd;int main(){ g_hwnd = GetConsoleHwnd();//这个函数也是dll里的,得到控制台的句柄 char buf[MAX_PATH]; GetWindowText(g_hwnd, buf,sizeof(buf)); cout<<(char*)buf<<endl; if(SetKeyHook(true, 0, g_hwnd)) { MSG msg; while(GetMessage(&msg,NULL,0,0)) { switch(msg.message) { //无效 case HM_KEY: GetKeyNameText(msg.lParam,buf,sizeof(buf)); cout<<buf<<endl; } } } else cout<<"Faild";}
if(count>4)
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
KillTimer(NULL,timerid);
printf("thread end here\n");
return 0;
}
[解决办法]
控制台哪有句柄啊 又没有window 怎么会有windowhandle
[解决办法]
好冲的人啊 够霸气~
createwindow啊~~ 我是菜鸟 所以对我而言难用 尤其是那一坨一坨的参数 ~~~
我是在说控制台没句柄 你怎么就扯到了createwindow呢?
控制台都是csr那边的东西啊~~~ 麻烦你先研究清楚好吧 第一次听说有人用createwindow创建控制台的……
[解决办法]