hook捕捉鼠标的键盘的操作
- 格式:docx
- 大小:15.45 KB
- 文档页数:2
jnativehook 是一个 Java 库,它提供全局的键盘和鼠标事件侦听功能。
以下是使用 jnativehook 的基本步骤:1. 下载和安装 jnativehook:首先,你需要从 jnativehook 的官方网站下载相关的库文件,并将其添加到你的 Java 项目的类路径中。
2. 创建一个监听器:在 Java 项目中创建一个监听器类,该类将实现 jnativehook 的接口来处理各种事件。
你可以创建一个名为 MyKeyListener 的类,并让它实现 NativeKeyListener 接口。
以下是一个简单的示例:java复制代码import org.jnativehook.GlobalScreen;import org.jnativehook.NativeHookException;import org.jnativehook.keyboard.NativeKeyEvent;import org.jnativehook.keyboard.NativeKeyListener;public class MyKeyListener implements NativeKeyListener {public void nativeKeyPressed(NativeKeyEvent e) {System.out.println("Key Pressed: " +NativeKeyEvent.getKeyText(e.getKeyCode()));}public void nativeKeyReleased(NativeKeyEvent e) {System.out.println("Key Released: " +NativeKeyEvent.getKeyText(e.getKeyCode()));}public void nativeKeyTyped(NativeKeyEvent e) {System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));}public static void main(String[] args) {try {GlobalScreen.registerNativeHook();} catch (NativeHookException ex) {System.err.println("There was a problem registering the native hook.");System.err.println(ex.getMessage());System.exit(1);}GlobalScreen.addNativeKeyListener(new MyKeyListener());}}在这个示例中,我们创建了一个名为 MyKeyListener 的类,并实现了 NativeKeyListener 接口。
Java实现Hook对鼠标键盘监听-沐早SNOTEBOOK-CSDN博客Java 实现 Hook 对鼠标键盘监听收藏Java 实现全局(全操作系统)的鼠标和键盘监控,使用的是SWT Win32 Extension 项目,在以前若使用Java恐怕是很难实现的!SWT Win32 Extension 让Java拥有了许多对操作系统底层操作的功能!注:本程序需要SWT Win32 Extension支持?以下两个例子是:(一)鼠标Hookview plaincopy to clipboardprint?1.import org.sf.feeling.swt.win32.extension.hook.Hook;2.import org.sf.feeling.swt.win32.extension.hook.data.Hook Data;3.import org.sf.feeling.swt.win32.extension.hook.data.Mous eHookData;4.import org.sf.feeling.swt.win32.extension.hook.listener.Ho okEventListener;5.6.public class HotMouse {7.8.public static void main(String[] args) {9.Hook.MOUSE.addListener(new HookEventListener() {10.public void acceptHookData(HookData hookData) {11.if (hookData != null) {12.//System.out.println("Mouse Point X = " + ((MouseHo okData)hookData).getPointX());13.//System.err.println("Mouse Point Y =" + ((MouseHookData)hookData).getPointY());14.System.err.println(((MouseHookData)hookData).getPoi ntX()+"," + ((MouseHookData)hookData).getPointY());15.}16.if (hookData.getWParam() == 513) { System.out.p rintln("left button pressed");// left button pressed17.} else if (hookData.getWParam() == 514) { System.out .println("left button released");// left button released18.} else if (hookData.getWParam() == 516) { System.out .println("right button pressed");// right button pressed19.} else if (hookData.getWParam() == 517) { System.out .println("right button");// right button20.} else if (hookData.getWParam() == 519) { System.out .println("middle button 519");// middle button21.} else if (hookData.getWParam() == 520) { System.out .println("middle button 520");// middle button22.}23.}24.});25.Hook.MOUSE.install();26.}27.28.}(二)键盘Hookview plaincopy to clipboardprint?1.import org.sf.feeling.swt.win32.extension.hook.Hook;2.import org.sf.feeling.swt.win32.extension.hook.data.HookData;3.import org.sf.feeling.swt.win32.extension.hook.data.Keyb oardHookData;4.import org.sf.feeling.swt.win32.extension.hook.listener.Ho okEventListener;5.6.public class HotKey {7.public static void main(final String[] args) {8.Hook.KEYBOARD.addListener(new HookEventListener(){// @Override9.public void acceptHookData(HookData arg0) {10.KeyboardHookData KHD = ((KeyboardHookData)arg0) ;11.System.out.println(KHD.getWParam()+" - "+KHD.getTr ansitionState()); //Print code12.if( KHD.getScanCode() == 29 && KHD.getTransitionSt ate()){ //按下Ctrl執行動作13.System.out.println("Hotting");14.}else if( KHD.getScanCode() == 1 ){ //按下[ESC]結束15.System.exit(0);16.}17.}});18.Hook.KEYBOARD.install(); //註冊事件19.}20.}以上两个例子源于:这里要感谢!感谢!。
pyhook的简单使⽤实验内容:通过python编程调⽤windows的api,编写键盘和⿏标监控的hook,将相关信息保存记录到txt⽂档中。
实验步骤:1.Hook技术,pyHook3和pywin32简介1.1 Hook简介windows应⽤程序是基于消息驱动的。
各种应⽤程序对各种消息作出响应从⽽实现各种功能。
hook(钩⼦)是⼀种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往⽬标窗⼝的消息并进⾏处理。
所以说,我们可以在系统中⾃定义钩⼦,⽤来监视系统中特定事件的发⽣,完成特定功能,如屏幕取词,监视⽇志,截获键盘、⿏标输⼊等等。
钩⼦实际上是⼀个处理消息的,通过,把它挂⼊系统。
每当特定的消息发出,在没有到达⽬的窗⼝前,就先捕获该消息,亦即先得到控制权。
这时钩⼦函数即可以加⼯处理(改变)该消息,也可以不作处理⽽继续传递该消息,还可以强制结束消息的传递。
Windows消息带了⼀些程序有⽤的信息,⽐如Mouse类信息,就带有⿏标所在窗体句柄、⿏标位置等信息,拦截了这些消息,就可以利⽤这些信息做出⼀些功能每⼀个Hook都有⼀个与之相关联的列表,称之为钩⼦,由系统来维护。
这个列表的指针指向指定的,应⽤程序定义的,被Hook⼦程调⽤的,也就是该钩⼦的各个处理⼦程序。
当与指定的Hook类型关联的消息发⽣时,系统就把这个消息传递到Hook⼦程。
⼀些Hook⼦程可以只监视消息,或者修改消息,或者停⽌消息的前进,避免这些消息传递到下⼀个Hook⼦程或者⽬的窗⼝。
最近安装的钩⼦放在链的开始,⽽最早安装的钩⼦放在最后,也就是后加⼊的先获得控制权。
与线程钩⼦:SetWindowsHookEx()函数的最后⼀个参数决定了此钩⼦是系统钩⼦还是线程钩⼦。
线程钩⼦⽤于监视指定线程的事件消息。
线程钩⼦⼀般在当前线程或者当前线程派⽣的线程内。
系统钩⼦监视系统中的所有线程的事件消息。
因为系统钩⼦会影响系统中所有的应⽤程序,所以必须放在独⽴的动态链接库(DLL) 中。
DELPHIHOOK函数建立键盘鼠标动作记录与回放在Delphi中,可以通过使用Hook函数来建立键盘鼠标动作的记录与回放。
Hook函数可以拦截系统消息和事件,并允许我们在消息处理前或处理后执行自定义的代码。
首先,我们需要创建一个DLL来实现Hook函数。
在Delphi中,可以通过创建一个动态链接库项目来实现这一点。
在动态链接库项目中,我们将添加一个Hook函数来拦截键盘和鼠标事件。
在Hook函数中,我们可以使用Windows API来获取键盘和鼠标的状态,以及记录和回放这些动作。
以下是一个简单的示例代码,演示如何创建基本的键盘鼠标动作记录与回放的功能:```delphilibrary MouseKeyboardHook;usesSystem.SysUtils,System.Classes,Winapi.Windows;varFOutputFile: TextFile;function KeyboardHookProc(code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;varkbHookStruct: PKBDLLHOOKSTRUCT;vkCode: Cardinal;beginif code >= 0 thenbeginkbHookStruct := PKBDLLHOOKSTRUCT(lParam);vkCode := kbHookStruct^.vkCode;//将键盘记录写入文件WriteLn(FOutputFile, 'Keyboard: ' + IntToStr(vkCode));end;// 继续传递消息给下一个HookResult := CallNextHookEx(0, code, wParam, lParam);end;function MouseHookProc(code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;varmsHookStruct: PMOUSEHOOKSTRUCT;mouseMsg: Cardinal;pt: TPoint;beginif code >= 0 thenbeginmsHookStruct := PMOUSEHOOKSTRUCT(lParam);mouseMsg := msHookStruct^.mouseData;pt := msHookStruct^.pt;//将鼠标记录写入文件WriteLn(FOutputFile, 'Mouse: ' + IntToStr(mouseMsg) + ' X:' + IntToStr(pt.X) + ' Y:' + IntToStr(pt.Y));end;// 继续传递消息给下一个HookResult := CallNextHookEx(0, code, wParam, lParam);end;procedure StartRecording;beginAssignFile(FOutputFile, 'actions.log');Rewrite(FOutputFile);// 安装键盘Hook// 安装鼠标Hookend;procedure StopRecording;begin// 卸载键盘Hook// 卸载鼠标HookCloseFile(FOutputFile);end;exportsStartRecording,StopRecording;beginend.```在上述代码中,我们创建了两个Hook函数:KeyboardHookProc和MouseHookProc。
利用钩子函数来捕捉键盘响应的windows应用程序一:引言:你也许一直对金山词霸的屏幕抓词的实现原理感到困惑,你也许希望将你的键盘,鼠标的活动适时的记录下来,甚至你想知道木马在windows操作系统是怎样进行木马dll的加载的…..其实这些都是用到了windows的钩子函数。
因此本文将对钩子函数的相关知识进行阐述。
当然,本文的目的并不是想通过此程序让读者去窃取别人的密码,只是由于钩子函数在windows系统中是一个非常重要的系统接口函数,所以想和大家共同的探讨,当然本文也对怎样建立动态连结库(DLL)作了一些简单的描述。
(本文的程序为vc6.0的开发环境,语言是:C和win32 api)。
二:钩子概述:微软的windowsX操作系统是建立在事件驱动的机制上的,也就是通过消息传递来实现。
而钩子在windows操作系统中,是一种能在事件(比如:消息、鼠标激活、键盘响应)到达应用程序前中途接获事件的机制。
而且,钩子函数还可以通过修改、丢弃等手段来对事件起作用。
Windows 有两种钩子,一种是特定线程钩子(Thread specific hooks),一种是全局系统钩子(Systemwide hooks)。
特定线程钩子只是监视指定的线程,而全局系统钩子则可以监视系统中所有的线程。
无论是特定线程钩子,还是全局系统钩子,都是通过SetWindowsHookEx ()来设置钩子的。
对于特定线程钩子,钩子的函数既可以是包含在一个.exe也可以是一个.dll。
但是对于一个全局系统钩子,钩子函数必须包含在独立的dll中,因此,当我们要捕捉键盘响应时,我们必须创建一个动态链接库。
但是当钩子函数在得到了控制权,并对相关的事件处理完后,如果想要该消息得以继续的传递,那么则必须调用另一个函数:CallNextHookEx。
由于系统必须对每个消息处理,钩子程序因此增加了处理的负担,因此也降低了系统的性能。
鉴于这一点,在windows ce中对钩子程序并不支持。
DELPHIHOOK函数建立键盘鼠标动作记录与回放1.键盘记录与回放:DELPHIHOOK函数可以捕获用户在键盘上的按键操作,并将这些操作记录下来,然后可以进行回放,模拟用户的按键过程。
这个功能在程序调试和测试中非常有用,可以帮助开发人员快速定位问题所在。
2.鼠标动作记录与回放:除了键盘操作,DELPHIHOOK函数还可以记录用户在鼠标上的操作,比如点击、移动等动作。
这样,在程序调试和测试中,可以直观地看到用户是如何操作鼠标的,从而更好地理解用户行为和需求。
3.自定义快捷键设定:DELPHIHOOK函数还支持自定义快捷键的设定,用户可以根据自己的需求设置一些快捷键,方便程序操作和调试。
DELPHIHOOK函数的实现原理是通过Windows的Hook技术来实现的,Hook是一种在Windows系统中用于拦截和修改系统消息和事件的机制。
DELPHIHOOK函数通过加载一个DLL动态链接库,并在其中设置一些Hook函数,来拦截并记录用户的键盘和鼠标操作。
下面我们来看一下DELPHIHOOK函数的具体实现步骤:1. 创建一个DLL项目:首先,在Delphi中创建一个DLL项目,命名为HookDLL。
2. 实现键盘Hook函数:在HookDLL中实现一个键盘Hook函数,用于捕获用户在键盘上的按键操作。
可以使用Windows API中的SetWindowsHookEx函数来实现。
3. 实现鼠标Hook函数:同样,在HookDLL中实现一个鼠标Hook函数,用于捕获用户在鼠标上的操作。
可以使用Windows API中的SetWindowsHookEx函数来实现。
4. 记录用户操作:在HookDLL中实现一个记录用户操作的函数,将捕获到的键盘和鼠标操作记录下来,保存到一个文件或内存中。
5. 回放用户操作:在HookDLL中实现一个回放用户操作的函数,用来读取之前记录的操作,然后模拟用户的操作过程。
6. 在主程序中调用HookDLL:最后,在Delphi主程序中调用HookDLL中的函数,来实现键盘和鼠标动作的记录和回放功能。
DELPHIHOOK函数建立键盘鼠标动作记录与回放Delphi是一种非常强大的编程语言和集成开发环境。
使用Delphi,我们可以开发各种类型的应用程序,包括桌面应用程序、移动应用程序和网页应用程序等。
本文将介绍如何使用Delphi编写钩子函数来记录和回放键盘和鼠标动作。
钩子函数是一种特殊的函数,可以捕获和处理操作系统中发生的事件。
在Delphi中,可以使用Windows API函数来设置钩子函数。
下面是一些常用的钩子函数:1. SetWindowsHookEx函数:用于设置全局钩子函数。
可以使用该函数来捕获系统中发生的各种事件,包括键盘事件和鼠标事件等。
2. CallNextHookEx函数:用于将事件传递给下一个钩子函数或默认处理程序。
在钩子函数中,应该调用该函数来确保事件被正确处理。
3. UnhookWindowsHookEx函数:用于删除之前设置的钩子函数。
首先,我们需要创建一个新的Delphi工程并添加一个窗体。
在窗体上放置两个按钮,一个用于开始记录,另一个用于停止记录。
我们还需要添加一些全局变量来保存记录的动作。
```delphiunit Main;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;IsRecording: Boolean;Actions: TList;implementation{$R *.dfm}procedure RecordMouseAction(var Msg: TMessage); stdcall; beginif IsRecording thenbegin//记录鼠标动作case Msg.Msg ofWM_LBUTTONDOWN:Actions.Add(Pointer('MouseLeftButtonDown'));WM_LBUTTONUP:Actions.Add(Pointer('MouseLeftButtonUp'));WM_RBUTTONDOWN:Actions.Add(Pointer('MouseRightButtonDown'));WM_RBUTTONUP:Actions.Add(Pointer('MouseRightButtonUp'));//添加更多的鼠标动作记录end;end;CallNextHookEx(0, Msg.Msg, Msg.WParam, Msg.LParam);end;procedure RecordKeyboardAction(var Msg: TMessage); stdcall; beginif IsRecording thenbegin//记录键盘动作case Msg.Msg ofWM_KEYDOWN:Actions.Add(Pointer('KeyDown:' + IntToStr(Msg.WParam))); WM_KEYUP:Actions.Add(Pointer('KeyUp:' + IntToStr(Msg.WParam)));//添加更多的键盘动作记录end;end;CallNextHookEx(0, Msg.Msg, Msg.WParam, Msg.LParam);end;procedure TForm1.Button1Click(Sender: TObject);begin//开始记录Actions := TList.Create;//设置鼠标钩子//设置键盘钩子IsRecording := True;end;procedure TForm1.Button2Click(Sender: TObject); vari: Integer;begin//停止记录IsRecording := False;//卸载钩子UnhookWindowsHookEx(HookMouse); UnhookWindowsHookEx(HookKeyboard);//回放记录的动作for i := 0 to Actions.Count - 1 dobeginif StrPos(PChar(Actions[i]), 'Mouse') <> nil then beginif StrPos(PChar(Actions[i]), 'ButtonDown') <> nil then begin//执行鼠标按下动作endelse if StrPos(PChar(Actions[i]), 'ButtonUp') <> nil then begin//执行鼠标松开动作end;endelse if StrPos(PChar(Actions[i]), 'Key') <> nil then beginif StrPos(PChar(Actions[i]), 'Down') <> nil thenbegin//执行键盘按下动作endelse if StrPos(PChar(Actions[i]), 'Up') <> nil thenbegin//执行键盘松开动作end;end;end;Actions.Free;end;end.```在上面的代码中,我们使用记录和回放动作的两个按钮的单击事件来控制开始/停止记录和回放动作。
外挂技术(钩子)WIndows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。
而钩子是WIndows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。
钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。
这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。
可见,利用钩子可以实现许多特殊而有用的功能。
因此,对于高级编程人员来说,掌握钩子的编程方法是很有必要的。
钩子的类型一.按事件分类,有如下的几种常用类型(1)键盘钩子和低级键盘钩子可以监视各种键盘消息。
(2)鼠标钩子和低级鼠标钩子可以监视各种鼠标消息。
(3)外壳钩子可以监视各种Shell事件消息。
比如启动和关闭应用程序。
(4)日志钩子可以记录从系统消息队列中取出的各种事件消息。
(5)窗口过程钩子监视所有从系统消息队列发往目标窗口的消息。
此外,还有一些特定事件的钩子提供给我们使用,不一一列举。
下面描述常用的Hook类型:1、WH_CALLWNDPROC和WH_CALLWNDPROCRET HooksWH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到窗口过程的消息。
系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC Hook 子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET Hook子程。
WH_CalLWNDPROCRET Hook传递指针到CWPRETSTRUCT结构,再传递到Hook子程。
CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。
2、WH_CBT Hook在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括:1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;2. 完成系统指令;3. 来自系统消息队列中的移动鼠标,键盘事件;4. 设置输入焦点事件;5. 同步系统消息队列事件。