gpt4 book ai didi

c++ - 如何在 Win32 控制台窗口上设置 CBT Hook ?

转载 作者:太空狗 更新时间:2023-10-29 20:48:27 25 4
gpt4 key购买 nike

我一直在尝试使用以下代码为我的 C++ 控制台应用程序设置 CBT Hook :

 ...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;
}

程序似乎可以正常运行,因为既没有编译错误也没有运行时错误。此外,我没有在 main() 函数中收到“FAIL”消息,这意味着 SetWindowHookEx 工作正常。但是,我没有收到 CBTProc 函数中所述的任何消息;甚至没有“默认”消息。谁能指出代码中的逻辑错误是什么?

谢谢。

最佳答案

问题在于 SetWindowHookEx 是基于 Win32 消息处理模型的。控制台窗口是内核本身的子项,不会创建自己的消息泵或窗口。

据我所知,直接做你想做的事是不可能的。

关于c++ - 如何在 Win32 控制台窗口上设置 CBT Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3199747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com