



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
利用VB建立鼠标键盘操作回放 很多的教学软件或系统监视软件可以自动记录回放用户的输入文字或点击按钮等操作操作,这个功能的实现是使用了Windows的Hook函数。本文介绍如何通过使用VB来实现鼠标键盘操作的纪录和回放。 Windows提供API函数SetwindowsHookEx来建立一个Hook,通过这个函数可以将一个程序添加到Hook链中监视Windows消息,函数语法为: Public Declare Function SetWindowsHookEx Lib user32 _ Alias SetWindowsHookExA _ (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long 其中参数idHook指定建立的监视函数类型。通过Windows MSDN帮助可以看到,SetwindowsHookEx函数提供15种不同的消息监视类型,在这里我们将使用WH_JOURNALRECORD和WH_JOURNALPLAYBACK来监视键盘和鼠标操作。参数lpfn指定消息函数,在相应的消息产生后,系统会调用该函数并将消息值传递给该函数供处理。函数的一般形式为: Hookproc (code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall; 其中code为系统指示标记,wParam和lParam为附加参数,根据不同的消息监视类型而不同。只要在程序中建立这样一个函数再通过SetwindowsHookEx函数将它加入到消息监视链中就可以处理消息了。 在不需要监视系统消息时需要调用提供UnHookWindowsHookEx来解除对消息的监视。 WH_JOURNALRECORD和WH_JOURNALPLAYBACK类型是两种相反的Hook类型,前者获得鼠标、键盘动作消息,后者回放鼠标键盘消息。所以在程序中我们需要建立两个消息函数,一个用于纪录鼠标键盘操作并保存到一个数组中,另一个用于将保存的操作返给系统回放。 下面是具体的程序实现:首先建立一个新工程,在Form1中加入三个CommandButton控件用于控制消息钩子,另外还可以增加若干Command或者TextBox控件用于检验操作回放的效果。然后在工程中增加一个模块文件,在模块中加入以下定义和代码:Option ExplicitPublic Type EVENTMSG message As Long paramL As Long paramH As Long time As Long hwnd As LongEnd TypePublic Declare Function CallNextHookEx Lib user32 _ (ByVal hHook As Long, _ ByVal ncode As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As LongPublic Declare Function SetWindowsHookEx Lib user32 _ Alias SetWindowsHookExA _ (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As LongPublic Declare Sub CopyMemoryT2H Lib kernel32 _ Alias RtlMoveMemory _ (ByVal Dest As Long, _ Source As EVENTMSG, _ ByVal Length As Long)Public Declare Sub CopyMemoryH2T Lib kernel32 _ Alias RtlMoveMemory _ (Dest As EVENTMSG, _ ByVal Source As Long, _ ByVal Length As Long)Public Declare Function UnhookWindowsHookEx Lib user32 _ (ByVal hHook As Long) As LongPublic Const WH_JOURNALPLAYBACK = 1Public Const WH_JOURNALRECORD = 0Public Const HC_SYSMODALOFF = 5Public Const HC_SYSMODALON = 4Public Const HC_SKIP = 2Public Const HC_GETNEXT = 1Public Const HC_ACTION = 0Public EventArr(1000) As EVENTMSGPublic EventLog As LongPublic PlayLog As LongPublic hHook As LongPublic hPlay As LongPublic recOK As LongPublic canPlay As LongPublic bDelay As BooleanPublic Function HookProc(ByVal iCode As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long Dim Result As Long recOK = 1 Result = 0 If iCode 0) And (iCode = HC_ACTION) Then 将消息纪录在纪录队列中 CopyMemoryH2T EventArr(EventLog), lParam, Len(EventArr(EventLog) EventLog = EventLog + 1 If EventLog = 1000 Then 当纪录大于1000后释放消息钩子 UnhookWindowsHookEx hHook End If End If HookProc = ResultEnd FunctionPublic Function PlaybackProc(ByVal iCode As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long Dim Result As Long canPlay = 1 Result = 0 If iCode = EventLog Then UnhookWindowsHookEx hPlay End If PlaybackProc = ResultEnd Function 在Form1的代码窗口中加入以下代码:Option ExplicitPrivate Sub Command1_Click() EventLog = 0 hHook = SetWindowsHookEx(WH_JOURNALRECORD, AddressOf HookProc, _ App.hInstance, 0) Command2.Enabled = True Command1.Enabled = FalseEnd SubPrivate Sub Command2_Click() UnhookWindowsHookEx hHook hHook = 0 Command1.Enabled = True Command2.Enabled = False Command3.Enabled = TrueEnd SubPrivate Sub Command3_Click() PlayLog = 0 hPlay = SetWindowsHookEx(WH_JOURNALPLAYBACK, AddressOf PlaybackProc, _ App.hInstance, 0) Command3.Enabled = FalseEnd SubPrivate Sub Form_Load() Command1.Caption = 纪录 Command2.Caption = 停止 Command3.Caption = 回放 Command2.Enabled = False Command3.Enabled = FalseEnd Sub 运行程序,点击“纪录”按钮,然后在TextBox中输入一些文字或者在窗口上移动光标后再按“停止”键停止消息纪录,然后按“回放”按钮,可以看到刚才鼠标键盘的操作被丝毫不差的回放了出来。 从上面的程序可以看到:通过WH_JOURNALRECORD可以建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届深圳市罗湖区高三开学质量检测语物理试题
- 民法总则试题及答案
- 专科生会计教学中的问题及对策思考-论文
- 承德法律知识培训报价课件
- 2025年涉电作业考试题及答案
- 医院锅炉项目
- 慢阻肺护理临床路径课件
- 2025年入学考试计算题及答案
- 护士病历操作考试题及答案
- 慕课不显示课件问题
- 医学教材 变态反应性疾病的诊疗进展标准版资料
- GB/T 44335-2024精细陶瓷涂层试验方法基于Stoney公式的陶瓷涂层内应力测定
- 水电站进水口启闭机排架结构及配筋计算书
- 跖骨骨折护理查房课件
- 癌症患者生活质量量表EORTC-QLQ-C30
- 《全媒体营销与运营》全套教学课件
- 学生心理问题的识别与干预+高中班主任工作培训
- 电解质溶液电导率
- 城市轨道交通车辆电气控制 课件2-4任务4车辆电气原理图识读方法
- DZ∕T 0097-2021 工程地质调查规范(1:50 000)(正式版)
- 2022-2023学年河南省郑州市高一下学期期末考试数学试题(解析版)
评论
0/150
提交评论