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

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

一、应用场景

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

二、考虑因素

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

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

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

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

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

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

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

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

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

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

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

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

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

猜你喜欢

Bernstein给予苹果公司和戴尔科技超配评级,谈及人工智能(AI)潜力。

来源:滚动播报…

Bernstein给予苹果公司和戴尔科技超配评级,谈及人工智能(AI)潜力。

他信允许探视了,母女三人一大早就前来看望,儿子班通达没有来(他信允许探视的英文)

清晨时分,他信的家人获准前往监狱探视。前妻朴乍曼携两位女儿萍通塔与佩通坦共同前往,三人着装朴素,各自携带款式普通的黑色手袋👝。此前因奢侈装扮引发舆论争议,此次她们刻意保持低调——朴乍曼身着具有泰国传统元素的连衣…

他信允许探视了,母女三人一大早就前来看望,儿子班通达没有来(他信允许探视的英文)

陈奕迅突发!打网球中暑晕倒,下巴缝了30多针,伤口深至见骨!(陈奕迅震撼现场)

从其所属公司发布的公告来看,现在歌迷们更多表达的是心疼和祝福,纷纷祈愿陈奕迅能尽快康复、重返舞台。尤其对陈奕迅这种实力与人气兼备的顶流歌手,演唱会对他的体能和嗓子状态都是巨大考验。想必陈奕迅也不愿意接二连三…

陈奕迅突发!打网球中暑晕倒,下巴缝了30多针,伤口深至见骨!(陈奕迅震撼现场)

印尼:“表情包”上线 凤头猕猴镜头感十足

(具体拍摄时间不详)印度尼西亚北苏拉威西省,一只凤头猕猴看着镜头,表情得意。图片来源:视觉中国(具体拍摄时间不详)印度尼西亚北苏拉威西省,一只凤头猕猴看着镜头,表情得意。图片来源:视觉中国 (具体拍摄…

印尼:“表情包”上线 凤头猕猴镜头感十足

DSPE-PEG-Streptavidin(二硬脂酰基磷脂酰乙醇胺-聚乙二醇-链霉亲和素)

DSPE-PEG-Streptavidin是一种通过共价方式将磷脂-聚乙二醇与链霉亲和素(Streptavidin)偶联得到的复合材料。构建生物素-亲和素-荧光探针检测平台,用于检测特定蛋白质、DNA🧬 或…

DSPE-PEG-Streptavidin(二硬脂酰基磷脂酰乙醇胺-聚乙二醇-链霉亲和素)