sap*_*Pro 8 java java-native-interface hook kernel keylogger
虽然我经常搜索,但我仍然不清楚究竟什么是"钩子".例如,我在维基答案上阅读了这篇文章:
钩子是一种在另一段代码之前插入一段代码的方法,这样第一段代码就可以在第二段代码之前执行,从而为第一段代码提供监视和/或过滤行为的机会第二段代码.一个示例可能是鼠标钩子,允许钩子代码监视鼠标,同时保留原始鼠标事件处理例程的功能.
我也读过这篇文章,但我仍然不明白究竟什么是"钩子".有人可以用外行的话来解释什么是"钩子"?为什么有些人会写一个"钩子"?另外,是否可以在Java中编写"钩子"?
注意:
我想在java中编写一个键盘记录器,我的一个朋友说你必须在C中写一个"钩子".我不能用Java编写整个键盘记录器(仅在windows上操作)?
编辑
请给出一个回答键盘记录.如何kernel使用挂钩向我的应用程序提供有关密钥的信息?或者我如何使用JNI在操作系统中注册我的应用程序?我希望我的应用程序记录用户按下的键.
我会将钩子这个词与至少两个不同的概念联系起来:
a) 观察者模式,其中一个类允许您添加一个侦听器,该侦听器将在某些事件上得到通知。您可以在 Swing、Servlet API 和许多 3rd 方框架中找到这一点。
b) 模板方法模式。抽象类定义了以什么顺序调用什么方法,并且实现类可以覆盖这些方法。这样的例子并不认为常见,但你在一段时间看到他们每一次。
在计算机编程中,术语钩子涵盖了一系列技术,用于通过拦截在软件组件之间传递的函数调用或消息或事件来改变或增强操作系统,应用程序或其他软件组件的行为.处理这种截获的函数调用,事件或消息的代码称为"钩子".
Java中的一个很好的例子就是Runtime.addShutdownHook.一个关闭挂钩只是一个初始化但尚未启动的线程.当虚拟机开始其关闭序列时,它将以某种未指定的顺序启动所有已注册的关闭挂钩,并让它们同时运行.
Runtime.addShutdownHook(new Thread(){
@Override
public void run(){
// do something before application terminates
}
});
Run Code Online (Sandbox Code Playgroud)