C#中的钩子是啥?
来源:http://www.tudoupe.com时间:2022-06-20
文章目录
- 起因
- 过程
- 百度词条描述
- 微软文档说明
- 关于使用
- 小结
起因
我不知道你在写Windows桌面软件时有没有遇到过“钩”这个词。无论如何,每次我拿起C#,开始写些桌面软件,都会遇到它。而且每次遇到它,我都是先百度一下,知道它和一个事件处理器一样是很好的。现在在我脑子里是:哈克=钱德勒。
可是这次遇到这个词后,我又说了一遍,我意识到我再也不能这样折磨自己了,我应该有更系统地理解这个概念。
因此,我再次打开百度,和以前不同,这次我将记录各种说法(微软文档,百度语句),并结合我的理解来组织它。
过程
百度词条描述
hook是一个由窗口提供的信息处理机制平台,在程序正常运行期间收到信息之前预启动的函数。检查和修改向程序发送的信息,钩子实际上是处理消息的程序的一部分,通过系统调用,把它挂入系统。每当发送一个特定的消息时,在到达目的地窗口之前,钩子程序首先捕捉消息,换句话说, 钩函数首先被控制.然后,钩函数可以处理(更改)消息,您也可以继续传递消息而不处理它。也可以强制结束消息返回。
仔细地听一下这位女婿的这段话,这段话实际上描述了钩子的全部特点。
- 它是程序的消息处理部分(窗口的消息机制被封为上层事件),因此可以说它是事件处理器。
- 它还运行在程序之前,
如果下面的图片是程序处理的正常消息:
这就是钩子应该的样子。
嗯,这个图像不是特别生动的,因为在钩子被抓取后,钩子函数被处理后,继续向用户程序发送,或者丢失后,你必须看看钩子函数是如何处理的。
微软文档说明
钩子是一个机制,通过它应用程序可以截获事件,例如消息、鼠标运动或键盘按键。 截获特定类型事件的函数称为钩子函数(程序)。
官方文件的描述类似于一个女婿的描述,在这里,“拦截”这个词被用来更形象地描述钩子。
同时, 文件 还 给出 了 一些 使用 的 钩 的 例子 :
- 监视消息以进行调试
- 支持宏记录和重播
- 为一些按键提供支持
- 模拟键鼠输入
- 实现CBT程序
注意,钩子经常会使系统减速,因为它们会增加系统对每个消息的处理量。 所以不要在不需要时使用钩子。
下面还有几个应用场景,要简短地分析(个人猜测):
- 监视调试消息。这实际上是在消息到达用户程序之前,你拦截它,然后打印它,然后决定下一步做什么。有点像调试中断点?也许是用钩子做的
- 例如,如果我按F5来刷新,我已经捕获了F5键,刷新了钩函数,然后把它传递给其他程序。
- 模拟键鼠输入,它实际上应该与前面的相似。截获原始消息,然后在钩子函数中,添加键鼠事件,就模拟了。适合短cut,例如,你需要做大量的鼠标操作,通过抓紧快捷键将鼠标操作的字符串添加到钩函数中来减少人类操作的数量。
关于使用
这是很多的说法,很难用。
这有点困难,因为原来的钩子是一个从底到上的东西,是用户32.DLL库的内容。
通常用法如下,
当然,NuGet现在有各种包装的钩子库,可以用在许多简单的方法。
例如,一个键盘类型操作,搜索KeyMouseHook,可以产生一个大的存储器,基本上只使用少数句子。
小结
因此钩子是处理函数,它们可以在它们到达用户程序之前截获消息。
相关新闻
- 2022-08-04 WPF的由来
- 2022-08-04 Win11勒索软件防护怎么打开?Win11安
- 2022-08-04 Windows系统jdk的配置
- 2022-08-04 Windows10 OneNote怎么重新登录?如何重
- 2022-08-04 超好用的 Windows 效率工具推荐
- 2022-08-04 Windows如何在CMD或PowerShell中配置代理
- 2022-08-04 powershell和cmd对比
- 2022-08-04 【QT】Windows下QT下载安装
- 2022-08-04 windows下 C++ 实现类属性的get和set方
- 2022-08-04 Win11快速助手在哪里?Win11打开快速
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
