按键精灵怎么使用后台的问题

查看: 167|回复: 9
下一站下一站
简单举个例子,具体自己研究 Dim Hwnd '定义变量,后台脚本一般都定义变量(习惯,不定义系统会默认定义) Hwnd = Plugin.Window.MousePoint() '得到鼠标指定窗口句柄,这是后台的关键语句 Delay 100 '延时时间 Call Plugin.Bkgnd.KeyPress(Hwnd
骑上单车去旅行
目前看情况,没问题,请把你的完整脚本贴出来,并说明用途和对应的到底是什么程序 要知道,不是所有程序,都支持后台的,特别是完全最小化. 有的窗口,激活状态,后台模式生效,切换到后台,后台模式就不生效.,而有的窗口,是最小化不生效,更有甚者是后台模
前台和后台有很多不同。。前台靠的是屏幕的坐标,后台靠的是窗口的坐标,两者完全不一样的。。。我不知道你写的坐标是屏幕的坐标还是后台窗口的坐标。后台的还需要窗口的句柄。。。这些你都没有。。。
龙口孙境阳
这就是按键精灵中的“伪后台”现象了。 按键精灵的后台插件很粗糙,对于大多数游戏来说,并不能真正的支持后台。于是就出现了这样的,前台可以生效,但真正后台却无效的情况。 这种情况,LZ可以用神盾试试可否改善。但是别抱太大希望。 同时LZ最好
Hwnd = Plugin.Window.MousePoint() Rem a Call Plugin.Bkgnd.LeftClick(Hwnd, 30, 304) Delay 5000 For 20 Call Plugin.Bkgnd.LeftClick(Hwnd, 817, 497) Delay 5000 Next Delay 5000 Call Plugin.Bkgnd.LeftClick(Hwnd, 43, 284) Delay 5000 C
与你桐花万里路
按键自带后台 但是很多游戏屏蔽它 大漠插件后台兼容性很好 但是新手有难度 Hwnd = Plugin.Window.Foreground() 这是自带后台的窗口句柄获取 然后向这个句柄发送后台模拟按键 就能实现后台
后台鼠标不能最小化窗口,窗口只要露出一小角肉眼能看到,后台鼠标就生效
efe5b53q9d
//得到鼠标指向的窗口句柄 Hwnd = Plugin.Window.MousePoint() //向后台窗口句柄(变量:Hwnd)发送一个键盘(扫描码:65)按键 Call Plugin.Bkgnd.KeyPress(Hwnd, 65) //向后台窗口句柄(变量:Hwnd)发送一个鼠标移动到客户区域(坐标:0, 0)处 Call
枣庄要强大
不存在你说的功能 你可以试着接两个鼠标 很显然两个鼠标都能控制电脑 互相影响 按键精灵就相当于拿第2个鼠标的人 你要解决的是两个鼠标功能分立
vncn实得分
如果您没有编写基础可能会看得很吃力 首先你要获取游戏句柄 然后你用后台插件命令像该窗口发送您的鼠标键盘找图找色等命令、 这样就能实现后台了 后台跟前台的区别很大很大。 你找到按键精灵-插件命令-后台命令 里面有后台命令,不过对于客户端回复:2677
【实用工具】剑网三按键精灵(支持双开/后台/PAKV3新客户端)【更新使用说明】
从论坛获得的筹码:
注册时间:
游戏初阶达人
贡献226, 距离下一级还需74贡献
注册时间:
自动加载图片
楼主 电梯直达 楼
    骚年,我看你根骨上佳,元气十足,乃是万中无一的练武奇才!只要你回个帖,我就传授你一门绝世武功,如何?  作者:无色幽明@乾坤一掷,无色月影分享  联系方式:YY群8725924  本按键小精灵是利用软件“按键精灵”(官网)制作的衍生程序,仅用于游戏“剑侠情缘网络版叁”(以下简称“剑网三”),功能是自动找到剑网三窗口并执行每秒按100次F8键的操作,通常用于打副本自动按宏,省去手按键盘的操作。  本文章节目录:  1 下载  2 解压  3 启动按键精灵  4 单窗口的启动和停止  5 宏的快捷键设置  6 双窗口的启动和停止  7 常见问题的解决办法  8 来自查毒网站的查毒报告--------------------------------------&我是------华丽丽的-----分割-----线--------------------------------------  1&下载  下载地址:(回复可见)***隐藏信息 回复后才能显示***      2&解压  下载到电脑上是一个压缩包,用压缩软件解压(比如WINRAR,或者360压缩、快压、7Z等等)。  随便解压到电脑上哪个位置都可以,只要你自己记得住就行,并不要求解压到特定位置。    3&启动按键精灵程序    现在的客户端分为PAKV3版本和非PAKV3版本,你自己根据情况选择用哪一个按键精灵。  双击启动按键精灵。弹出按键精灵主界面,桌面右下角也有按键精灵的图标(可能右下角会出按键精灵内置的广告,那个与作者无关,是按键精灵自带的,请无视吧o(╯□╰)o)  游戏与按键精灵随便哪个先开都行,并不要求先开哪个后开哪个    4&单窗口的启动和停止  单个窗口的启动和停止:按F9启动、F10停止。(或者按F11启动、F12停止)这两组都可以对剑网三窗口输入F8,你只需要自己选择其中一组即可。如果你是用F9启动的,那么只能用F10来停止。如果你是用F11启动的,那么只能用F12来停止。不要搞混淆了。无论哪一组启动,都会每秒按100次F8键。    5&双窗口的启动和停止  启动:  先切换到第一个剑网三窗口,F9启动,即可开始对第一个剑网三窗口的按键输入,按的键位是F8;  再切换到第二个剑网三窗口,F11启动,即可开始对第二个剑网三窗口的按键输入,按的键位也是F8  停止:  按F10停止对第一个剑网三窗口的按键  按F12停止对第二个剑网三窗口按键  或者按CTRL+F12可以全部停止    6&宏的快捷键设置  此外还需要你在游戏内设置好你的宏。宏的快捷键必须设置在F8键位上。  不管你的宏是哪一种,请自行设置好你的宏内容  想找宏推荐去超级宏官网()    这些都设置好以后,按F9启动,就可以打怪打BOSS了  --------------------------------------&我是-------华丽丽的-----分割-----线--------------------------------------&  7&常见问题解决办法  最常见的问题:按键精灵启动以后,怎么没有打怪呢?  可能的原因:宏的快捷键没有设置为F8  解决办法:将宏的快捷键设置为F8  可能的原因:宏的内容不对  解决办法:检查你的宏(如果宏是正确的那么手动按F8应该可以打怪;反之,如果手动按F8没有反应,那么你的宏有问题)  可能的原因:客户端版本与按键精灵版本不一致  解决办法:客户端标题末尾有“PAKV3”的就用PAKV3版对按键精灵,否则就用非PAKV3版的  可能的原因:同时运行了两个按键精灵,或者之前运行过别的按键精灵但是忘了关  解决办法:关闭所有按键精灵,重新开启;客户端关闭之后重新开启,而按键精灵却没有重新启动;重新启动按键精灵  可能的原因:未知原因的按键精灵卡住  解决办法:关闭按键精灵重新开启  可能的原因:Win7、win8系统或64位不兼容  解决办法:关闭按键精灵,然后找到你的按键精灵所在位置,鼠标右键点按键精灵,在&属性&--&兼容性&菜单中设置兼容模式为windows&xp&sp3,并在下方勾选“以管理员模式运行”,重启按键精灵  如果还不行,那我也没办法了,要怪就怪按键精灵的兼容性不够好吧o(╯□╰)o  可能的原因:安全软件拦截如360  解决办法:弹出拦截窗口,点放行即可,不需要关闭360。本按键精灵是安全的,后文有查毒报告和MD5。注意,必须保证下载地址是作者的网盘,而不是从别的什么地方下载的,否则安全性不能保证  可能的原因:游戏窗口开了全屏模式  解决办法:改成窗口最大化模式  可能的原因:特殊职业毒经或田螺的指向性范围技能(包括百足、天绝地灭、暗藏杀机)在窗口为后台的时候放不出来  解决办法一:把毒经、田螺窗口放到前台  解决办法二:用一个特殊插件副本自动选,来保证即使窗口后台也可以放出指向性范围技能。详见作者的毒经宏说明部分中对这个问题的详细解决办法,地址  其他问题  其他问题:为什么不能自定义快捷键?  解决办法:Windows&xp据说可以,win7win8不行;另外,作者很懒O(∩_∩)O哈哈~  其他问题:为什么不能自动TAB和自动旋转?  解决办法:这个本来就是设计用来副本按宏的,不是用来设计野外挂机刷怪的  还有,作者担心功能太逆天的按键精灵会被和谐,所以不愿意加入这些功能  你们如果实在是很需要这些功能,去找按键精灵论坛的高手吧。。。注意别搞得全民都是按键精灵挂机刷怪,人人争当工作室,最后金山一怒全部和谐,大家都没得用,那就不好了--------------------------------------&我是-------华丽丽的-----分割-----线--------------------------------------  8&查毒报告  来自网站的包含37种杀毒软件的查毒报告,这个报告可以通过网址查看  查毒报告全文引用如下  文件名称&:剑网三按键精灵(支持双开&后台&新客户端).rar&(本站不提供任何文件的下载服务)  文件大小&:4820881&byte  文件类型&:RAR&archive&data,&v1d,&os  MD5&:9fc78c8eebc5f3d476b5  SHA1&:0ff4eee9ebfeabfc6fcf5016adf173a-squared5.1.0.400-1.348AntiVir8.2.10.2027.11.50.58-11.267Arcavir2011-15.206Authentium5.3.145.3.14-0.000AVAST!4.7.4-0.000AVG10.0.1405-0.000BitDefender7.137.53327-0.000ClamAV0.97.818500-0.000Comodo5.115023-11.528CP&Secure1.3.0.5-0.208Dr.Web5.0.2.330036.053F-Prot4.6.2.117-15.248F-Secure7.02.73807.04-0.239GData22.14422-16.590IkarusT3.1.32.10.0..1.32.10.0.--1.32.10.0-0.000Microsoft1.10100-22.540NOD323.0.219358-0.000Norman6.8.3-0.000nProtect-6.531Quick&Heal11.00-4.154Sophos3.16.14.62-3.309Sunbelt2432824328-0.372The&Hacker6.8.0.5v00379-0.916VBA323.12.24.39-0.000ViRobot-0.471VirusBuster5.5.2.1315.0.704.0/-0.000卡巴斯基5.5.10-0.000安博士V3.00-16.967安天2.0.182.0.18.-0.211江民杀毒16.0.100-0.000熊猫卫士9.05.01-0.000瑞星20.024.46.00.03-7.335赛门铁克1.3.0.24-2.818趋势科技9.500-100510.618.05-1.192迈克菲5805-5.550金山毒霸.15.9-1.463飞塔4.3.39216.549-0.421■Heuristic/Suspicious&&■Exact注意:&就算报告发现病毒,也可能是杀软误报,请根据查毒结果自行判断
从论坛获得的筹码:
注册时间:
贡献43, 距离下一级还需7贡献
注册时间:
良心回复啊。。露珠辛苦
从论坛获得的筹码:
注册时间:
贡献9, 距离下一级还需11贡献
注册时间:
总算找出来了!
从论坛获得的筹码:
注册时间:
贡献31, 距离下一级还需19贡献
注册时间:
强大!抱走了,谢谢露珠~
从论坛获得的筹码:
注册时间:
贡献48, 距离下一级还需2贡献
注册时间:
我这儿有本秘籍
从论坛获得的筹码:
注册时间:
贡献1, 距离下一级还需19贡献
注册时间:
回回回回回
从论坛获得的筹码:
注册时间:
贡献4, 距离下一级还需16贡献
注册时间:
从论坛获得的筹码:
注册时间:
贡献1, 距离下一级还需19贡献
注册时间:
灰灰灰灰灰
从论坛获得的筹码:
注册时间:
贡献7, 距离下一级还需13贡献
注册时间:
从论坛获得的筹码:
注册时间:
贡献3, 距离下一级还需17贡献
注册时间:
怒马一个!!
回帖后跳转到最后一页
您需要登录后才可以发帖&&VB制作按键精灵那种后台按键工具
我的图书馆
VB制作按键精灵那种后台按键工具
在VB中,有多种方法可以实现键盘模拟,我们就介绍几种比较典型的。 1.局部级模拟 从上面的流程可以看出,键盘事件是最终被送到,然后才引起目标程序响应的。那么最直接的模拟方法就是:直接伪造一个键盘消息发给目标程序。哈哈, 这实在是很简单,windows提供了几个这样的API函数可以实现直接向目标程序发送消息的功能,常用的有SendMessage和 PostMessage,它们的区别是PostMessage函数直接把消息仍给目标程序就不管了,而SendMessage把消息发出去后,还要等待目 标程序返回些什么东西才好。这里要注意的是,模拟键盘消息一定要用PostMessage函数才好,用SendMessage是不正确的(因为模拟键盘消 息是不需要返回值的,不然目标程序会没反应),切记切记!PostMessage函数的VB声明如下:Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long参数hwnd 是你要发送消息的目标程序上某个控件的,参数wMsg 是消息的类型,表示你要发送什么样的消息,最后wParam 和lParam 这两个参数是随消息附加的数据,具体内容要由消息决定。再来看看wMsg 这个参数,要模拟按键就靠这个了。键盘消息常用的有如下几个:WM_KEYDOWN 表示一个普通键被按下WM_KEYUP 表示一个普通键被释放WM_SYSKEYDOWN 表示一个系统键被按下,比如Alt键WM_SYSKEYUP 表示一个系统键被释放,比如Alt键如 果你确定要发送以上几个键盘消息,那么再来看看如何确定键盘消息中的wParam 和lParam 这两个参数。在一个键盘消息中,wParam 参数的 含义较简单,它表示你要发送的键盘事件的按键虚拟码,比如你要对目标程序模拟按下A键,那么wParam 参数的值就设为VK_A ,至于lParam 这个参数就比较复杂了,因为它包含了多个信息,一般可以把它设为0,但是如果你想要你的模拟更真实一些,那么建议你还是设置一下这个参数。那么我们就详细 了解一下lParam 吧。lParam 是一个long类型的参数,它在内存中占4个字节,写成就是 00
一共是32位,我们从右向左数,假设最右边那位为第0位(注意是从0而不是 从1开始计数),最左边的就是第31位,那么该参数的的0-15位表示键的发送次数等扩展信息,16-23位为按键的扫描码,24-31位表示是按下键还 是释放键。大家一般习惯写成16进制的,那么就应该是&H00 00 00 00 ,第0-15位一般为&H0001,如果是按下键,那 么24-31位为&H00,释放键则为&HC0,那么16-23位的扫描码怎么会得呢?这需要用到一个API函数 MapVirtualKey,这个函数可以将虚拟码转换为扫描码,或将扫描码转换为虚拟码,还可以把虚拟码转换为对应字符的ASCII码。它的VB声明如 下:Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long参 数wCode 表示待转换的码,参数wMapType 表示从什么转换为什么,如果是虚拟码转扫描码,则wMapType 设置为0,如果是虚拟扫描码转 虚拟码,则wMapType 设置为1,如果是虚拟码转ASCII码,则wMapType 设置为2.相信有了这些,我们就可以构造键盘事件的 lParam参数了。下面给出一个构造lParam参数的函数:Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As LongFunction MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long'参数VirtualKey表示按键虚拟码,flag表示是按下键还是释放键,用WM_KEYDOWN和WM_KEYUP这两个常数表示 Dim s As String Dim Firstbyte As String 'lparam参数的24-31位 If flag = WM_KEYDOWN Then '如果是按下键 Firstbyte = "00" Else Firstbyte = "C0" '如果是释放键 End If Dim Scancode As Long '获得键的扫描码 Scancode = MapVirtualKey(VirtualKey, 0) Dim Secondbyte As String 'lparam参数的16-23位,即虚拟键扫描码 Secondbyte = Right("00" & Hex(Scancode), 2) s = Firstbyte & Secondbyte & "0001" '0001为lparam参数的0-15位,即发送次数和其它扩展信息 MakeKeyLparam = Val("&H" & s)End Function这 个函数像这样调用,比如按下A键,那么lParam=MakeKeyLparam(VK_A,WM_KEYDOWN) ,很简单吧。值得注意的是,即使你 发送消息时设置了lParam参数的值,但是系统在传递消息时仍然可能会根据当时的情况重新设置该参数,那么目标程序收到的消息中lParam的值可能会 和你发送时的有所不同。所以,如果你很懒的话,还是直接把它设为0吧,对大多数程序不会有影响的,呵呵。 好了,做完以上的事情,现在我们可以向目标程序发送键盘消息了。首先取得目标程序接受这个消息的控件的句柄,比如目标句柄是12345,那么我们来对目标模拟按下并释放A键,像这样:(为了简单起见,lParam这个参数就不构造了,直接传0)PostMessage 12345,WM_KEYDOWN,VK_A,0& '按下A键PostMessage 12345,WM_UP,VK_A,0& '释放A键好 了,一次按键就完成了。现在你可以迫不及待的打开记事本做实验,先用FindWindowEx这类API函数找到记事本程序的句柄,再向它发送键盘消息, 期望记事本里能诡异的自动出现字符。可是你马上就是失望了,咦,怎么一点反应也没有?你欺骗感情啊~~~~~~~~~~55 不是的哦,接着往下看啊。一般目标程序都会含有多个控件,并不是每个控件都会对键盘消息作出反应,只有把键盘消息发送给接受它的控件才会得到期望 的反应。那记事本来说,它的编辑框其实是个edit类,只有这个控件才对键盘事件有反应,如果只是把消息发给记事本的窗体,那是没有用的。现在你找出记事 本那个编辑框的句柄,比如是54321,那么写如下代码:PostMessage 54321,WM_KEYDOWN,VK_F1,0& '按下F1键PostMessage 54321,WM_UP,VK_F1,0& '释放F1键怎么样,是不是打开了记事本的“帮助”信息?这说明目标程序已经收到了你发的消息,还不错吧~~~~~~~~可以马上新问题就来了,你想模拟向记事本按下A这个键,好在记事本里自动输入字符,可是,没有任何反应!这是怎么一回事呢?原 来,如果要向目标程序发送字符,光靠WM_KEYDOWN和WM_UP这两个事件还不行,还需要一个事件:WM_CHAR,这个消息表示一个字符,程序需 靠它看来接受输入的字符。一般只有A,B,C等这样的按键才有WM_CHAR消息,别的键(比如方向键和功能键)是没有这个消息的,WM_CHAR消息一 般发生在WM_KEYDOWN消息之后。WM_CHAR消息的lParam参数的含义与其它键盘消息一样,而它的wParam则表示相应字符的ASCII 编码(可以输入中文的哦^_^),现在你可以写出一个完整的向记事本里自动写入字符的程序了,下面是一个例子,并附有这些消息常数的具体值:Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongDeclare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As LongPublic Const WM_KEYDOWN = &H100Public Const WM_KEYUP = &H101Public Const WM_CHAR = &H102Public Const VK_A = &H41 Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long Dim s As String Dim Firstbyte As String 'lparam参数的24-31位 If flag = WM_KEYDOWN Then '如果是按下键 Firstbyte = "00" Else Firstbyte = "C0" '如果是释放键 End If Dim Scancode As Long '获得键的扫描码 Scancode = MapVirtualKey(VirtualKey, 0) Dim Secondbyte As String 'lparam参数的16-23位,即虚拟键扫描码 Secondbyte = Right("00" & Hex(Scancode), 2) s = Firstbyte & Secondbyte & "0001" '0001为lparam参数的0-15位,即发送次数和其它扩展信息 MakeKeyLparam = Val("&H" & s)End FunctionPrivate Sub Form_Load() dim hwnd as long hwnd = XXXXXX 'XXXXX表示记事本编辑框的句柄 PostMessage hwnd,WM_KEYDOWN,VK_A,MakeKeyLparam(VK_A,WM_KEYDOWN) '按下A键 PostMessage hwnd,WM_CHAR,ASC("A"),MakeKeyLparam(VK_A,WM_KEYDOWN) '输入字符A PostMessage hwnd,WM_UP,VK_A,MakeKeyLparam(VK_A,WM_UP) '释放A键End Sub这就是通过局部键盘消息来模拟按键。这个方法有一个极大的好处,就是:它可以实现后台按键,也就是说他对你的前台操作不会有什么影响。
其他回答(1)
3.驱动级模拟 如果上面的方法你都试过了,可是你发现目标程序却仍然顽固的不接受你模拟的消息,寒~~~~~~~~~还好,我还剩下最后一招,这就是驱动级模拟:直接读写键盘的硬件端口! 有一些使用DirectX接口的游戏程序,它们在读取键盘操作时绕过了windows的消息机制,而使用DirectInput.这是因为有些游戏对实时 性控制的要求比较高,比如赛车游戏,要求以最快速度响应键盘输入。而windows消息由于是队列形式的,消息在传递时会有不少延迟,有时1秒钟也就传递 十几条消息,这个速度达不到游戏的要求。而DirectInput则绕过了windows消息,直接与键盘驱动程序打交道,效率当然提高了不少。因此也就 造成,对这样的程序无论用PostMessage或者是keybd_event都不会有反应,因为这些函数都在较高层。对于这样的程序,只好用直接读写键 盘端口的方法来模拟硬件事件了。要用这个方法来模拟键盘,需要先了解一下键盘编程的相关知识。 在DOS时代,当用户按下或者放开一个键 时,就会产生一个键盘中断(如果键盘中断是允许的),这样程序会跳转到BIOS中的键盘中断处理程序去执行。打开windows的设备管理器,可以查看到 键盘控制器由两个端口控制。其中&H60是数据端口,可以读出键盘数据,而&H64是控制端口,用来发出控制信号。也就是,从& H60号端口可以读此键盘的按键信息,当从这个端口读取一个字节,该字节的低7位就是按键的扫描码,而高1位则表示是按下键还是释放键。当按下键时,最高 位为0,称为通码,当释放键时,最高位为1,称为断码。既然从这个端口读数据可以获得按键信息,那么向这个端口写入数据就可以模拟按键了!用过 QbASIC4.5的朋友可能知道,QB中有个OUT命令可以向指定端口写入数据,而INP函数可以读取指定端口的数据。那我们先看看如果用QB该怎么写 代码:假如你想模拟按下一个键,这个键的扫描码为&H50,那就这样OUT &H64,&HD2 '把数据&HD2发送到&H64端口。这是一个KBC指令,表示将要向键盘写入数据OUT &H60,&H50 '把扫描码&H50发送到&H60端口,表示模拟按下扫描码为&H50的这个键那么要释放这个键呢?像这样,发送该键的断码:OUT &H64,&HD2 '把数据&HD2发送到&H64端口。这是一个KBC指令,表示将要向键盘写入数据OUT &H60,(&H50 OR &H80) '把扫描码&H50与数据&H80进行或运算,可以把它的高位置1,得到断码,表示释放这个键好了,现在的问题就是在VB中如何向端口写入数据了。因为在windows中,普通应用程序是无权操作端口的,于是我们就需要一个驱动程序来帮助我们实 现。在这里我们可以使用一个组件WINIO来完成读写端口操作。什么是WINIO?WINIO是一个全免费的、无需注册的、含源程序的 WINDOWS2000端口操作驱动程序组件(可以到 上 去下载)。它不仅可以操作端口,还可以操作内存;不仅能在VB下用,还可以在DELPHI、VC等其它环境下使用,性能特别优异。下载该组件,解压缩后可 以看到几个文件夹,其中Release文件夹下的3个文件就是我们需要的,这3个文件是WinIo.sys(用于win xp下的驱动程序), WINIO.VXD(用于win 98下的驱动程序),WinIo.dll(封装函数的动态链接库),我们只需要调用WinIo.dll中的函数,然后 WinIo.dll就会安装并调用驱动程序来完成相应的功能。值得一提的是这个组件完全是绿色的,无需安装,你只需要把这3个文件复制到与你的程序相同的 文件夹下就可以使用了。用法很简单,先用里面的InitializeWinIo函数安装驱动程序,然后就可以用GetPortVal来读取端口或者用 SetPortVal来写入端口了。好,让我们来做一个驱动级的键盘模拟吧。先把winio的3个文件拷贝到你的程序的文件夹下,然后在VB中新建一个工 程,添加一个模块,在模块中加入下面的winio函数声明:Declare Function MapPhysToLin Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysSize As Long, ByRef PhysMemHandle) As LongDeclare Function UnmapPhysicalMemory Lib "WinIo.dll" (ByVal PhysMemHandle, ByVal LinAddr) As BooleanDeclare Function GetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long) As BooleanDeclare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long) As BooleanDeclare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As Byte) As BooleanDeclare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte) As BooleanDeclare Function InitializeWinIo Lib "WinIo.dll" () As BooleanDeclare Function ShutdownWinIo Lib "WinIo.dll" () As BooleanDeclare Function InstallWinIoDriver Lib "WinIo.dll" (ByVal DriverPath As String, ByVal Mode As Integer) As BooleanDeclare Function RemoveWinIoDriver Lib "WinIo.dll" () As Boolean' ------------------------------------以上是WINIO函数声明-------------------------------------------Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long'-----------------------------------以上是WIN32 API函数声明-----------------------------------------再添加下面这个过程:Sub KBCWait4IBE() '等待键盘缓冲区为空Dim dwVal As Long Do GetPortVal &H64, dwVal, 1'这句表示从&H64端口读取一个字节并把读出的数据放到变量dwVal中'GetPortVal函数的用法是GetPortVal 端口号,存放读出数据的变量,读入的长度 Loop While (dwVal And &H2)End Sub上面的是一个根据KBC规范写的过程,它的作用是在向键盘端口写入数据前等待一段时间,后面将会用到。然后再添加如下过程,这2个过程用来模拟按键:Public Const KBC_KEY_CMD = &H64 '键盘命令端口Public Const KBC_KEY_DATA = &H60 '键盘数据端口Sub MyKeyDown(ByVal vKeyCoad As Long) '这个用来模拟按下键,参数vKeyCoad传入按键的虚拟码Dim btScancode As LongbtScancode = MapVirtualKey(vKeyCoad, 0)
KBCWait4IBE '发送数据前应该先等待键盘缓冲区为空 SetPortVal KBC_KEY_CMD, &HD2, 1 '发送键盘写入命令'SetPortVal函数用于向端口写入数据,它的用法是SetPortVal 端口号,欲写入的数据,写入数据的长度 KBCWait4IBE SetPortVal KBC_KEY_DATA, btScancode, 1 '写入按键信息,按下键 End SubSub MyKeyUp(ByVal vKeyCoad As Long) '这个用来模拟释放键,参数vKeyCoad传入按键的虚拟码Dim btScancode As LongbtScancode = MapVirtualKey(vKeyCoad, 0)
KBCWait4IBE '等待键盘缓冲区为空 SetPortVal KBC_KEY_CMD, &HD2, 1 '发送键盘写入命令 KBCWait4IBE SetPortVal KBC_KEY_DATA, (btScancode Or &H80), 1 '写入按键信息,释放键End Sub定义了上面的过程后,就可以用它来模拟键盘输入了。在窗体模块中添加一个定时器控件,然后加入以下代码:Private Sub Form_Load() If InitializeWinIo = False Then
'用InitializeWinIo函数加载驱动程序,如果成功会返回true,否则返回false MsgBox "驱动程序加载失败!" Unload MeEnd IfTimer1.Interval=3000Timer1.Enabled=TrueEnd SubPrivate Sub Form_Unload(Cancel As Integer)ShutdownWinIo '程序结束时记得用ShutdownWinIo函数卸载驱动程序End SubPrivate Sub Timer1_Timer()Dim VK_A as Long = &H41 MyKeyDown VK_A MyKeyUp VK_A '模拟按下并释放A键End Sub运行上面的程序,就会每隔3秒钟模拟按下一次A键,试试看,怎么样,是不是对所有程序都有效果了?需要注意的问题:要在VB的调试模式下使用WINIO,需要把那3个文件拷贝到VB的安装目录中。键盘上有些键属于扩展键(比如键盘上的方向键就是扩展键),对于扩展键不应该用上面的MyKeyDown和MyKeyUp过程来模拟,可以使用下面的2个过程来准确模拟扩展键:Sub MyKeyDownEx(ByVal vKeyCoad As Long) '模拟扩展键按下,参数vKeyCoad是扩展键的虚拟码Dim btScancode As LongbtScancode = MapVirtualKey(vKeyCoad, 0) KBCWait4IBE '等待键盘缓冲区为空 SetPortVal KBC_KEY_CMD, &HD2, 1 '发送键盘写入命令 KBCWait4IBE SetPortVal KBC_KEY_DATA, &HE0, 1 '写入扩展键标志信息
KBCWait4IBE '等待键盘缓冲区为空 SetPortVal KBC_KEY_CMD, &HD2, 1 '发送键盘写入命令 KBCWait4IBE SetPortVal KBC_KEY_DATA, btScancode, 1 '写入按键信息,按下键
End SubSub MyKeyUpEx(ByVal vKeyCoad As Long) '模拟扩展键弹起Dim btScancode As LongbtScancode = MapVirtualKey(vKeyCoad, 0) KBCWait4IBE '等待键盘缓冲区为空 SetPortVal KBC_KEY_CMD, &HD2, 1 '发送键盘写入命令 KBCWait4IBE SetPortVal KBC_KEY_DATA, &HE0, 1 '写入扩展键标志信息
KBCWait4IBE '等待键盘缓冲区为空 SetPortVal KBC_KEY_CMD, &HD2, 1 '发送键盘写入命令 KBCWait4IBE SetPortVal KBC_KEY_DATA, (btScancode Or &H80), 1 '写入按键信息,释放键 End Sub还 应该注意的是,如果要从扩展键转换到普通键,那么普通键的KeyDown事件应该发送两次。也就是说,如果我想模拟先按下一个扩展键,再按下一个普通键, 那么就应该向端口发送两次该普通键被按下的信息。比如,我想模拟先按下左方向键,再按下空格键这个事件,由于左方向键是扩展键,空格键是普通键,那么流程 就应该是这样的:MyKeyDownEx VK_LEFT '按下左方向键Sleep 200 '延时200毫秒MyKeyUpEx VK_LEFT '释放左方向键Sleep 500MyKeyDown VK_SPACE '按下空格键,注意要发送两次MyKeyDown VK_SPACESleep 200MyKeyUp VK_SPACE '释放空格键
馆藏&22979
TA的最新馆藏
喜欢该文的人也喜欢}

我要回帖

更多关于 按键精灵点一点教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信