【蓝因子教育】一个 HOOK 的例子

【蓝因子教育】一个 HOOK 的例子

一、应用场景

封装一个 OCX 控件,该控件的作用是来播放一个视频文件,需要在一个进程中放置四个控件实例。 由于控件是提供给别人用的,因此需要考虑很多东西。

二、考虑因素

1、控件的父窗口 resize 时需要控件也随之 resize

子窗体不能知道父窗口的 resize 情况,因为父窗口不会主动把这一情况通知子窗口。 因此需要放一个钩子来主动得知父窗口的 resize 事件,然后告诉控件窗口做出适当的改变。

这里用了一个局部钩子,即线程钩子。 被放置钩子的线程是控件的父窗口所在的线程 (这也是考虑第 3 个因素的原因)

2、这四个控件是否为同一个父窗口

在该场景中考虑到了多个控件在同一个父窗口的情况:这种情况下,当父窗口 resize 的时候,就需要通知每一个控件 (子窗口)。 又因为多个控件的父窗口可能不是同一个,因此钩子就要被放置到每一个父窗口所在的线程。

3、执行四个控件 UI 相关代码的线程是否为同一个线程

由于控件的所在场景相对无法控制,因此控件的父窗口的代码有可能是在不同的线程中执行的 (虽然 99.999% 可能性是同一个线程),这就需要在每个不同的线程中放置一个钩子 (这基于一个前提,那就是 放置钩子的线程 == 执行钩子回调函数的线程)。

综合 3 个因素,可以得出这样一个 对应关系

一个线程 Thread: 被放置钩子的线程 == 控件的父窗口所在的线程 (可能这样说不准确,但权且这样说) == 执行钩子回调函数的线程

一个 Hook: 每放置一个钩子就产生一个 HOOK, 对于同一个线程只放置一次,如果四个控件的父窗口不是同一个线程,那么就要放置多个。还因为要在代码中使用 CallNextHook 将当前线程对应的钩子作为参数传给该函数,因此要保存线程和钩子的对应关系。

一个父窗口句柄: 即相同父窗口的控件的父窗口

若干个子窗口 (控件):同一个父窗口有多个子窗口

今日霍州(www.jrhz.info)©️

特别声明:[【蓝因子教育】一个 HOOK 的例子] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

沉默的荣耀》聂曦做梦想不到,黎晴是谷正文的人,难怪吴石被抓(《沉默的荣耀》观众破10亿)

朱枫则继续周旋在女儿女婿面前,暗中等待与吴石将军接头的时机。他供出朱枫的身份,虽得吴石冒险办理通行证相助,最终仍双双落入敌手。原来她是谷正文安插在国防部的暗棋,专门针对吴石将军布下的致命诱饵。 在层层监视的险…

《<strong>沉默的荣耀</strong>》聂曦做梦想不到,黎晴是谷正文的人,难怪吴石被抓(《<strong>沉默的荣耀</strong>》观众破10亿)

8.26追剧日历:2部首播、1部收官、3部定档、18部热播中(追剧日记电视剧)

CCTV8、第17-18集;『优酷』&amp;爱奇艺,第19-20集。东方卫视&amp;江苏卫视&amp;北京卫视,第35-36集;『优酷』&amp;爱奇艺,会员第36集。『优酷』,第1-3集,今日首播。腾讯视频,第27

8.26追剧日历:2部首播、1部收官、3部定档、18部热播中(追剧日记电视剧)

演都不演了?甩掉『陈伟霆』,牵手百亿太子的『蔡卓妍』,为自己行为买单(演都不演了是啥意思)

这段婚姻最终没有走到最后,但离婚后的阿Sa做出了令人意外的决定——她不久后便公开了新的恋情。大家知道当时『陈伟霆』与杨颖曾有过一段悲伤的恋情,两人分手时的遗憾仍在许多人心中。尽管大家一度认为她和『陈伟霆』的恋情与杨颖…

演都不演了?甩掉『陈伟霆』,牵手百亿太子的『蔡卓妍』,为自己行为买单(演都不演了是啥意思)

精准测量的秘密武器:高精度正弦规及其应用(精确测量经典句子)

你知道什么是正弦规吗?这种看似简单的装置却蕴含着精密的角度测量原理,广泛应用于制造业和工程领域。从机械制造到光学设计,它不仅提升了生产效率,还确保了产品质量。本文将深入探讨高精度正弦规的工作原理、应用场景及选购要点,帮助您了解这一神奇的测量

精准测量的秘密武器:高精度正弦规及其应用(精确测量经典句子)

双人乐清跟团游:探索江南水乡的理想之旅(乐清附近亲子游)

为何双人跟团游是体验乐清的独特方式?本文将为你揭开乐清跟团游的魅力,深度解析这一流行旅游模式背后的独特价值和乐趣。 通过深入介绍行程安排、景点特色以及游玩体验,揭示其为何成为情侣和朋友出游的新宠。

双人乐清跟团游:探索江南水乡的理想之旅(乐清附近亲子游)