如何让正在忙时的程序响应钩子

huangbinlq 2008-12-07 02:22:43
键盘钩子--

挂钩:g_hHookKbd = SetWindowsHookEx(WH_KEYBOARD,MyKbdHook,nullptr, GetCurrentThreadId());
钩子函数:LRESULT CALLBACK MyKbdHook(int code,WPARAM wp,LPARAM lp)
{
if(wp==VK_F2)
{
...
}
return CallNextHookEx(g_hHookKbd,code,wp,lp);
}

一般情况下,上述代码正确执行,但当程序正在执行一项耗时的操作时,钩子就不起作用了!不是说钩子是将属于程序窗口的消息提前接收了吗,这不跟程序忙闲与否没有关系吗?为何程序在忙时钩子就收不到消息了呢?
那如何才能实现程序忙时也能让钩子起作用呢?
...全文
50 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zskof 2008-12-08
  • 打赏
  • 举报
回复
顶1楼,LZ一般挂的是主消息线程吧,你说的程序忙就是主线程卡在某一个消息处理中了吧,等它忙完了自然会调你的hook,不可能在它正忙的时候强制插入执行你的hook代码吧,如果你实在是想在它忙的时候注入它的进程,使用CreateRemoteThread,只不过杀软必报。
yaozhu88 2008-12-08
  • 打赏
  • 举报
回复
你要GetMessage时,程序才会去取消息。此时你的HOOK 过程也才能运行。猜想调用HOOK过程 是在GetMessage中里面调用的。
所以你要做的就是在主线程的窗口过程把忙的动作用另一个线程做,不要让它打断主线程的消息循环?
huangbinlq 2008-12-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnzdgs 的回复:]
不是收不到消息,是程序没有取消息,等到程序“忙”完之后去取消息的时候,Hook函数就被调用了。
[/Quote]

我也知道是这样,但怎样才能让钩子马上响应呢?
cnzdgs 2008-12-07
  • 打赏
  • 举报
回复
不是收不到消息,是程序没有取消息,等到程序“忙”完之后去取消息的时候,Hook函数就被调用了。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧