钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
在某些情况下应用程序需要实现快捷键执行特定功能,例如Unity最小化后通过快捷键来截取桌面图片(最小化后用户焦点不在Unity上,UnityEngine下的Input.GetKey()也无法监听)。
修改了一下button1_Click(),改为了静态函数。
利用Hook实现全局键盘监听:
using System
using System.Collections
using System.Collections.Generic
using System.Diagnostics
using System.Runtime.InteropServices
//using System.Windows.Forms
using UnityEngine
public class GlobalInput : MonoBehaviour
{
//安装钩子
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId)
//卸载钩子
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern
对app进行hook的意思是去调用或者篡改APP代码。
软件HOOK即钩子函数,钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。
钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
HOOK技术在windows系统下编程,应该会接触到api函数的使用,常用的api函数大概有2000个左右。今天随着控件,stl等高效编程技术的出现,api的使用概率在普通的用户程序上就变得越来越小了。当诸如控件这些现成的手段不能实现的功能时,我们还需要借助api。
hook是一个英语单词,名词、动词,作名词时意思是“挂钩,吊钩”,作及物动词时意思是“钩住;引上钩”,作不及物动词时意思是“钩住;弯成钩状”。
.hook是Windows中提供的一种用以替换DOS下“中断”的系统机制。
双语例句
1、Hang your coat up on that hook.
把你的上衣挂在那个挂钩上。
2、Hang your coat on the hook.
把你的外套挂在那个钩上。
3、You can tap into key moments in that lifecycle by implementing one or more of the lifecycle hook interfaces.
你可以通过实现一个或多个生命周期钩子接口,切入到生命周期中的关键时间点。
Hook原理
每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程序。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。
一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。
Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的 *** 作。
钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)