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

一、应用场景

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

二、考虑因素

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

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

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

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

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

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

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

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

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

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

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

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

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

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

猜你喜欢

极空间AI NAS探秘|8个话题深度探讨AI NAS在内容创作上的应用(极空间论坛)

在英特尔公布的首批6家AI NAS厂商中,就包含了极空间,它成立于2019年,一直都专注于家庭与企业端网络存储解决方案,其产品可以说是产品形态与创新应用并重,首款NAS产品就获得了2025年红点设计大奖;另…

极空间AI NAS探秘|8个话题深度探讨AI NAS在内容创作上的应用(极空间论坛)

美国nobel传感器KOSD-107 1000KN(传感器国外品牌)

能感受规定的被测量并按照一定的规律转换成可用输出信号的器件或装置。 ① 敏感元件是指传感器中能直接(或响应)被测量的部分。 ② 转换元件指传感器中能较敏感元件感受(或响应)的北侧量转换成是与传输和(或)测量…

美国nobel传感器KOSD-107 1000KN(传感器国外品牌)

联锁装置(Interlocks)(联锁装置的作用)

其诞生背景主要是为了解决在激光设备使用过程中可能出现的安全问题。联锁装置的工作原理主要是通过检测激光设备的工作状态,当设备出现异常或操作不当时,自动切断激光电源或中断激光束。 联锁装置广泛应用于激光设备、医…

联锁装置(Interlocks)(联锁装置的作用)

十一月备孕必备:2025新款高颜值四季月子帽孕妇产后专用?(十一月份备孕怀女孩几率大吗)

十一月准妈妈们选购月子帽时如何兼顾时尚与实用性?2025年的高颜值四季月子帽不仅是时尚单品,更是贴心的产后护理伴侣。本文详解月子帽的材质、功能与挑选技巧,帮助你做出明智的选择。

十一月备孕必备:2025新款高颜值四季月子帽孕妇产后专用?(十一月份备孕怀女孩几率大吗)

卫生间🚻防水补漏选啥好?防水防霉塑钢泥能否解决厨卫新烦恼?2025升级趋势全解析(重庆卫生间🚻防水补漏)

卫生间🚻漏水、瓷砖发霉、接缝开裂等困扰?防水防霉塑钢泥可能是你的答案。本文深度解读如何选择合适的补漏材料,涵盖预算考量、操作流程与误区避坑,助您轻松应对厨房卫浴难题。了解最新2025年趋势,提升家居品质。

卫生间🚻防水补漏选啥好?防水防霉塑钢泥能否解决厨卫新烦恼?2025升级趋势全解析(重庆卫生间🚻防水补漏)