Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Win32控制台窗口上设置CBT挂钩?_C++_Console_Hook - Fatal编程技术网

C++ 如何在Win32控制台窗口上设置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) {

我一直在尝试为我的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)
 { 
    //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消息处理模型。控制台窗口是内核本身的子窗口,不创建自己的消息泵或窗口

直接做你想做的事是不可能的