C++ 如何在Win32控制台窗口上设置CBT挂钩?
我一直在尝试为我的C++控制台应用程序设置一个CBT钩子,代码如下:C++ 如何在Win32控制台窗口上设置CBT挂钩?,c++,console,hook,C++,Console,Hook,我一直在尝试为我的C++控制台应用程序设置一个CBT钩子,代码如下: ...includes... typedef struct _HOOKDATA { int type; HOOKPROC hookproc; HHOOK hhook; }_HOOKDATA; _HOOKDATA hookdata; //CBT LRESULT CALLBACK CBTProc(int code, WPARAM wParam, LPARAM lParam) {
...includes...
typedef struct _HOOKDATA
{
int type;
HOOKPROC hookproc;
HHOOK hhook;
}_HOOKDATA;
_HOOKDATA hookdata;
//CBT
LRESULT CALLBACK CBTProc(int code, WPARAM wParam, LPARAM lParam)
{
//do not proccess message
if(code < 0)
{
cout<<"code less than 0"<<endl;
return CallNextHookEx(hookdata.hhook,code,wParam,lParam);
}
switch(code)
{
case HCBT_ACTIVATE:
break;
case HCBT_CREATEWND:
cout<<"CREATEWND"<<endl;
break;
case HCBT_MINMAX:
cout<<"MINMAX"<<endl;
break;
default: //unknown
cout<<"DEFAULT"<<endl;
break;
}
return CallNextHookEx(hookdata.hhook, code, wParam, lParam);
}
int main()
{
hookdata.type = WH_CBT;
hookdata.hookproc = CBTProc;
hookdata.hhook = ::SetWindowsHookEx(hookdata.type, CBTProc,
GetModuleHandle( 0 ), GetCurrentThreadId());
if(hookdata.hhook == NULL)
{
cout<<"FAIL"<<endl;
system("pause");
}
system("pause");
return 0;
}
…包括。。。
typedef结构_HOOKDATA
{
int型;
HOOKPROC-HOOKPROC;
哈哈哈哈;
}_数据;
_HOOKDATA HOOKDATA;
//CBT
LRESULT回调CBTProc(int代码、WPARAM WPARAM、LPARAM LPARAM)
{
//不处理消息
如果(代码<0)
{
问题是SetWindowHookEx基于Win32消息处理模型。控制台窗口是内核本身的子窗口,不创建自己的消息泵或窗口
直接做你想做的事是不可能的