说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB如何使键盘、Mouse失效(JournalPlayBack Hook)

HTML文档下载 WORD文档下载 PDF文档下载
VB如何使键盘、Mouse失效(JournalPlayBack Hook)
我们常见一些导览系统或教学系统,会自动移动Mouse与Keyin字,而那个时候,我们
不管Keyin或动Mouse都没有效,直到完成了导览系统的某个动作後才让使用者可以移
动Mouse与做Keyin的动作;想做到这个,要借重JournalPlayBack Hook。

JournalPlayBack Hook,它和JournalRecord Hook合称Journal Hook,它们作用
的范围是整个System,也就是挂上这个Hook後,影响的层面不单是这个Process,而是
所有的Process,而这两Hook又不用写在Dll之中,所以很好用。

首先我们要知道由键盘和Mouse输入等的硬体讯息,会存到一个System Queue而後OS会
到该System Queue看有没有讯息在其中,若有则撷取出来,看目前Active的Window是谁
而将讯息Post给它。而挂上JournalRecord Hook时,当有讯息被撷取出来时,会先执行
我们所设定的Hook Function(在vb中,一定要放在.BAS档之中)。这可以做什麽事呢?
例如们可以Check整个系统是否有按了键盘或有没有移动Mouse(一般来说,KeyUp,KeyDown
, MouseMove等Event只有Form在Active 时才收得到,挂上JournalRecord hook後,执行
Hook的thread便能收到所有这些讯息)。再如,它既然能收到Keyboard、Mouse的讯息,那
便可以将收到的讯息记录起来(记录於Memory或Disk都可以),之後再依方才的顺序重新
将讯息放送出来,可重新执行方才的动作(这不就是巨集的作法吗),或许
它叫JournalRecord便是这个原因。再来便是播放记录讯息的问题了,如果一面播放,一
面有其他讯息插队(如移动Mouse),那就不对了,所以JournalPlayBack这个Hook它会
让Mouse、Keyboard都失效,当OS 要求读System Queue时,便会启动这个Hook,就在此
时,我们可以把方才记录起来的讯息丢出一个出来,OS再要求读System Queue时,再丢
下一个讯息,如此达重播的效果(所以才叫JournalPlayBack),正因它会让键盘、Mouse
失效,拿它来做导览、教学系统的自动Move Mouse或文字显示是最适合的了。

Mouse的自动导引系统制作方式,可参考如何自动移动Mouse

'以下在.Bas中
Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long)
Const WM_MOUSELAST = &H209
Const WM_MOUSEFIRST = &H200
Public Const WM_KEYLAST = &H108
Public Const WM_KEYFIRST = &H100
Public Const WH_JOURNALRECORD = 0
Public Const WH_JOURNALPLAYBACK = 1

Type EVENTMSG
message As Long
paramL As Long
paramH As Long
time As Long
hwnd As Long
End Type
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
Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
Public hNxtHook As Long ' handle of Hook Procedure
Public msg As EVENTMSG

Sub EnableHook()
hNxtHook = SetWindowsHookEx(WH_JOURNALPLAYBACK, AddressOf HookProc, App.hInstance, 0)
End Sub
Sub FreeHook()
Dim ret As Long
ret = UnhookWindowsHookEx(hNxtHook)
End Sub
Function HookProc(ByVal code As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
HookProc = CallNextHookEx(hNxtHook, code, wParam, lParam)
End Function

'以下在Form中,需求:一个Command1, 一个text1
Private Sub Command1_Click()
Dim str5 As String, len5 As Long, i As Long

Call EnableHook
str5 = "这是一个测试JournalPlayBackHook的程式"
len5 = Len(str5)
For i = 1 To len5
Text1.Text = Mid(str5, 1, i)
Text1.Refresh
Sleep (200)
Next
Call FreeHook
End Sub

云中保障数据安全及完整性必须防范的遗留问题 VMware推出移动性平台:VMware Horizon Suite 移动周报:全球最大校园Hackathon的参赛宝典 Unity3D首届游戏创意设计大赛开始报名 中国日报:向移动新媒体蜕变 C#五子棋程序设计 Mozilla宣布推出Firefox OS 面临四大问题 Ruby 2系列首个稳定版 Ruby 2.0.0-P0发布 微软改进Windows Blue搜索 系统或今夏推出 移动新趋势:扁平化设计 vs. 拟物化设计(下篇) 传奇程序员:Minecraft开发者Notch大神 让沟通更便捷 ConnectYard宣布推出全新的Web API 在Hadoop上运行SQL:程序员需知晓的13种数据工具 怎样用好Eucalyptus? AWS攻势变猛,Rackspace主动降价CDN与云存储 惠普将于下季度推出低功耗的Moonshot服务器 webOS复活!LG收购webOS用于智能电视 那些因为HTML5而将消亡的产品 初窥iWatch用户界面:开创基于时间的全新体验 如何编写出拥抱变化的代码? 20个优秀的前端框架 以AWS和vCloud为标杆看四大开源平台的定位 桌面集成开发环境五年内必将“死亡”? 助影人圆梦奥斯卡 8mm相机应用其实很平庸 苹果应用审查团队叫停Cookie追踪技术 时势造英雄:中国早期O2O创业故事 iOS开发与Android开发的四大不同 “消极抵抗”AWS OpsWork?RightScale首次宣布转售并支持GCE 2012年VC都把钱投给了哪些大数据初创公司? 耐用性将成苹果iWatch最大挑战 Sphinx:首款全硬件加速HTML5游戏引擎发布 取ADO的recordset对象的recordcount属性总是 -1,如何解决? 这样的网络游戏一个值多少钱?请报价。 软件发布:《加密樵夫》 软件发布:《加密樵夫》 谁有Dreamweaver4.0的注册码,我晕,555555555…~~~~~~~~~ 我曾在本论坛看到一篇“用纯ASP代码实现图片上传并存入数据库中”的文章,可是怎样实现一个页面上传多幅图片呢,高手能否帮忙看一下? 如何检测一个超链接是不是死链接 软件发布:加密专家系统 只要点一下,妹妹我就以身相许 谁有Dreamweaver4.0的注册码,我晕,555555555…~~~~~~~~~11 请问只要是线程就有消息队列,还是此线程产生window后才有消息队列?在控制台程序中,在消息循环中,当受到一wm_timer消息时,此消息将发送给那一window procedure? 软件发布:三维几何画板 CSDN有徐州的朋友吗 请教高手一个关于图像格式的问题 高手清帮忙:如何获得一个控件的电子签名认证?急,急,急! 觅有时间有经验用MAPINFO开发GIS的高手? IE 能不能同时浏览2种以上不同设置的网页? 初级asp问题 询问-----上海在哪里有软件考试报名? 怎样用SDK的方法改变文本框的前景色和背景色?(内空) 能推荐几个有关COM、ActiveX技术的网站吗?每个10分不够再加。 请问ljhua,ASP网页怎样调用*.bat文件,是服务器上的还是客户机上的bat? ****************** 先散掉点分,省得走的时候累赘 ****************** UNICODE和WinMain 一个空战游戏,附源程序! 创建WebSnap应用程序(一) 请教一个http错误号 vs.net安装(2) 请教高手,怎样使用信使服务向局域网内的其他用户发通知? 使用过DeviceIoControl的高手请进: 不知用过jbuilder5的朋友有何感想 如何用程序中断拔号连接? DLL调用 搞什么鬼?不给超过三次? ADOTable如何查询数据? 软件发布:小精灵 vcguy,come on! 我在用resin做标签库时遇到问题,请大家帮忙。 没有源代码的情况下,由*.DLL该如何生成相应的*.LIB文件? 那位先生对 Oracle Spatial比较感兴趣~~~~~~~~~~~~ 如何在电子邮件中加入JAVA语句,重谢!!! 我不知道~ 竟猜: 成精的狐狸不是狐狸mm就是狐狸jj。那HolyFire 是狐狸jj还是狐狸mm呢?? 软件发布:图标精灵 请问在网上怎样发传真! 为何我的表只能做一页 怎样从显示名称获得它的PItemIDList ********如何在窗体中动态的创建组建?********来者有分 笔记本电脑和台式机怎样连起来传输文件! 很菜的问题,请各位指教谢谢! 花开石头你个笨鸟 我在这里那!! 将1-12分别填入图中的12个小方格内,使得每条边上的四个数的和相等,这个和最大是多少? 把19分成若干个自然数的和,如何分才能使他们的乘积最大 有一个质数,是一个两位数,两个数字之和是8,两个数字之差是2,这个质数是多少? 将-8,-6,-4,-2,0,2,4,6,8这9个数分别填入图中9个方格中,使得每行3个数,每列3个数 把19分成n个自然数的和,怎样分才能使它的乘积最大. 一个质数是两位数,其数字之差为7,这个质数是多少 任意画出由九个数组成的方框,设中间一个数为x,这九个数的和y,试用含x的代数式表示y 1.把19分成几个自然数的和,要使这些数的乘积最大,应该怎么分?最大的乘积是多少?2.甲、乙、丙三乡各出等量的钱,购买若干辆汽车,买好后,由于丙乡需要量少,结果丙乡比甲、乙两乡各少要15辆 有一个质数,是两个数字组成的两位数,两个数字之和是8,相差2,这个质数是? 在括号内填上合适的数字(不能重复)1/( )+1/( )+1/( )+1/( )+1/( )+1/( )+1/( )+1/( )=1 如图是某月的月历,用正方形圈出九个数,设最中间一个是x,则用x表示这9个数的和是? 把19分成若干个自然数的和,如何分才能使自然数的乘积最大?最大值是多少?要算式解. 一道数学题2()-()2=()7括号里的数该填几 从月历中框出3*3九个日期,他们的和有怎样的规律?将方框向左向上移动一格,这九个数的和会发生什么变化. 把19分成几个自然数的和,这些加数的连乘积最大是? 1/5=1/()+1/()【括号里填不同的数】 如图,机械手要将一个工件从图中A处移动到B处,但是这个工件不能碰到图中的障碍(不包括坐标轴),试用坐标写出一条机械手在移动中可能走的路程 已知四个互不相等的整数的乘积等于9,这四个数的和是? 4 4 4 4=16 顺序不变,中间要填什么符号才能等于16 设在排成每行7天的月历表中某数是a,那么它下方第1个数是几?用代数式表示.这是几次多项式? 已只4个互不相等的整数的乘积等于9这4个的和是几快 9 7 21 5 8 14 ( ) ,问:括号里填什么? 设在排成每行7天的月历表中某个数是a,那么它下方第一个数是几?用代数式表示,这是几次多项式? 一个整数和一个小数的乘积等于它们的和,求这两个数. 把1,2,3,4,5,6,7,8,9分别填空在正方形的方格 某月的月历上连续三天的日期之和不可能是( ) a.18 b.78 c.65 d.9 如何证明两个数的乘积等于最大公因数与最小公倍数的乘积 把2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1分别填在9个格子里,使横竖斜行都得8.1 你能否用方框在如图的月历中圈出9个数,使这9个数之和为171?如能,请说明理由;如不能,在下一个月的月在下一个月的月历中能否圈出?为什么? 有三个正整数一个比一个大1,三个数的乘积是210,求三个数 把0、1、2、3、4、5、6、7、8、9分别填在方框里怎样填? 口+口=口+口=口+口=口+口=口+口 在2008年12月的月历上能框出和是80的9个数吗?能框出和是180的9个数吗? 如果3个连续的正整数的乘积是210,那么这3个数分别是多少? 1、将九个连续自然数填入3*3的方格内,使得每行、每列以及每条对角线上的三个数的和都等于66.2、将图中的数重新排列,使得每行、每列以及每条对角线上的三个数的和都相等.(22 )(30 ) 2008年12月份的月历卡,一共可以框出几个不同的和?长方形的长是3,宽也是3!(每次都要框9个数) 三个连续正整数,他们的乘积是336,求这三个数. 在九个方格中填入-8、-6、-4、-2、0、2、4、6、8使每行,每列,每条对角线上的三个数等于零 在2008年12月的月历上能框出和是80的9个数吗?要方法! 三个连续的正整数,如果后两个数的乘积的差为114,求这三个数的和 将数字1,4,5,6,7,8,9分别填入如图的方格中,要求每个格子中的数字都比它左边格子中的数字和上边格子中的数字大,问:共有几种填法 将0.3;0.6;0.9;1.2;1.5;1.8;2.1;2.4;2.7九个数填在方格中,使各行个列及对角线上的三个数的和均相等 三个正整数的乘积为84,其中两个数的和等于另一个数,这三个数分别是什么? 1、2、3、4、5、6中选出四个数字,填入方格里,使得右边的数比左边的大,下面的比上面的大,几种填法?图是“田”字图 将0.3 0.6 0.9 1.2 1.8 2.1 2.4 2.7九个数填在下面的方格里,是各行各列及对角上的三个数的和均相等. 怎样修改:自然数可以分为奇数、偶数、质数、合数.(注:不能改变“自然数”、“偶数”、“合数”这几个字) 从1、2、3、4、5中选出四个数字,填入下图的方格里,使得右边的数比左边的大,下面的数比上面的数大,一共有多少种不同的填法一个3列2行的表格,最右边的一列上行是6下行是7 把-7,-5,-3,-1,1,3,5,7,9这九个数填在九个方格内使每横的三个数每竖的三个数以及对角线上的三个数的和相等 什么叫自然数 小数 百分数 奇数 偶数 质数 合数 因数 倍数 公倍数 互质数 九个方格,第一行左边一个数是3,第二行左边一个数是6右边一个数是2,在其他空格中填上什么数字才能让...九个方格,第一行左边一个数是3,第二行左边一个数是6右边一个数是2,在其他空格中填 把2,3,4,5,6,7,8,9,10这九个数填到九个方格中,使每行每列,以及对角线上的各数之和都相等 整数、自然数、小数、分数、奇数、偶数、质数、合数、因数、倍数、真分数、假分数的定义分别是什么?请回答者把以上所有的数的定义都回答上,回答的全的网友追加分! 从1,2,3,4,5中选出四个数,填入图中的方格内,使得右面的数比左边的数大,下面的数比上面的数大,那么有多少种填法,写出算式.图片为长方形分成四个填数… 0.1.2.3.4.5.6.7.8.9这一组数字当中,分别填到方框里(每个数只能用一次),使三个算式成立(至少写两个答 非零自然数按()的个数来分,可以分成质数()和() 把-1、+2、-3、+4、-5、+6、-7、+8、-9填入图所示的的方框内(3×3),使得每行每列每一条对角线上的三个数都满足:1.三个数乘积都是负数 2.三个数绝对值得和都相等. 将0、1、2、3、4、5、6这七个数字分别填入下面算式的方框内,每个方框内只许填一个数字,使算式成立( )x( )=( )( )=( )( )除( ) 两个连续的非零自然数,他们都是质数,这两个数分别是( ) ( ) 如图,在另两个方框内各填入一个数,使前两个数之和比后两个数之和小5,且三个数之和为0-3 ( )( ) 用0.1.2.3.4.5.6.7.8.9这10个数添在方框里,试下面的3个算式成立□+□〓□□―□〓□□□÷□〓□ ()和任何非零自然数都能组成互质数;两个质数的乘积一定是()
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn