按键精灵Function为什么报错?

以下哪一个不是按键精灵的产品 按键箱子 录制的脚本没有以下哪个功能 记录鼠标特征码 下列哪一个命令不属于 "全部命令 " 内核命令 按键精灵自带的抓图工具是 按键抓抓 哪一种方法能够找到命令的帮助说明 在全部命令中搜索命令 , 点击后帮助说明 会出现在编辑器下方 . 按键精灵不可以在以下哪个系统中使用 Linux 可以使用神盾功能的程序是 小精灵商业版 旧版本的脚本导入到新版本中 , 以下哪种方法不可以纠正语法错误 使用"自动缩 进"功能? WaitClick 命令的含义是 按任意鼠标键继续 ? 哪一类脚本程序是按键精灵官方授予销售权的 小精灵商业版 只要在编辑脚本,切换输入法时,按键精灵就卡住了 , 可能是下列哪一个原因 Plugin 目录下装有不是官方提供的插件引起的 关于加密脚本的描述,下列是错误的是 只有会员输入密码可以解开加密脚本 GetLastClick 命令的含义是 检测上次按过的鼠标键 按键精灵生成的小精灵程序的后缀名是 EXE 按键精灵会员不能享受的论坛权限是 可以访问按键精灵“版版家园”专区享受 版主资源 网页按键精灵是下列哪一个程序 wqm.exe 按键精灵的产品包括以下哪一个 按键盒子 按键精灵是下列哪一个程序 按键精灵 9.exe 按键精灵会员卡注册码 ,没有以下哪一种 天卡(1 天) UnlockMouse 命令的含义是 解除锁定鼠标位置 ? 按键精灵会员不能享受的资源是 免费小精灵的源代码 RightUp 命令的含义是 右键弹起 按键精灵的功能不包括 自动发明汽车、飞机、火箭等机器 按键精灵能兼容下列哪一种语言 VBS 不能用抓抓工具直接获取的是 PID 关于按键精灵的描述,以下正确的是 按键精灵是一款绿色的模拟键盘鼠标操作 的软件? 脚本编辑界面上没有的按钮是启动 ? 与取色判断命令没有直接关系的参数是 按键码 以下哪种方式可以在脚本编辑界面中获取到新的插件 点击"资源库 "按钮, 然后 导入需要的插件 LeftClick 命令的含义是 左键单击 按键精灵官方网站的网址是 RestoreMousePos命令的含义是恢复上次保存的鼠标位置 如果按键精灵在某些环境失效 , 可以使用下列哪个工具 神盾 SaveMousePo命令的含义是保存当前鼠标所在位置 GetCursorPos 命令的含义是 得到鼠标位置坐标 键盘命令的类型不包括 锁定 按键精灵里运算符乘号是 * KeyPress 命令的含义是 按键 MiddleClick 命令的含义是 中键单击 LockMouse命令的含义是锁定鼠标位置 按键精灵会员不能享受的功能是 脚本编写服务 GetCursorShape 命令的含义是 得到鼠标形状 按键精灵自带的用户界面叫做什么 QUI 界面 RightClick 命令的含义是 右键单击 按键精灵里运算符减号是 - 按键精灵默认的启动热键是 F10 属于"全部命令"的是 我的命令库 “录制”功能不能录制的内容是 记录鼠标指向的窗口句柄 按键抓抓是下列哪一个程序 picker.exe 想要知道脚本是否存在错误 , 应该使用下列哪个功能 调试 以下哪种方式不可以获得论坛银币 发布大量无内容的主题贴 按键精灵里运算符除号是 / 按键精灵会员不能享受的技术支持是 技术人员上门服务 按键精灵自带的功能不包括以下哪一个 路由功能 GetLastKey命令在获取一次ANSI字符代码后继续循环执行返回值是? 0 变量的定义,以下哪个是正确的 dim a 下列哪一种方法不能够正确输入命令 鼠标右键单击命令 按键精灵的功能是?模拟鼠标键盘操作的工具 ? MoveF命令的含义是相对移动 关于小精灵去广告的描述,下列正确的是 会员用户在“制作按键小精灵”界面 上->更多设置->选择会员去广告(是)即可 ? 按键精灵里运算符加号是 + 对小精灵的描述,以下是正确的 按键小精灵是把按键精灵的脚本打包成一个可 单独执行的EXE程序,便于传播以及提供给新手使用。? LeftDown 命令的含义是 左键按下 键鼠的模拟方式不包括以下哪一个 虚拟模拟 3、 区域找图的命令是 FindPic 4、 按键精灵语言大小写的描述哪一个是正确的 按键精灵不区分大小写 7、KeyPress 命令有几个参数 2 13、不能实现键盘按下"A"键的命令是KeyPressW "A",1 15、下列哪一个不是循环命令 Select Case 颜色值为 "000000" 是什么颜色 黑色 以下哪一个不属于按键精灵的 "全部命令" 远程嗅探命令? 20、下列RGB颜色值,书写正确的是"DD"? 23、

}

按键精灵原理之键盘事件模拟  

键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制。
当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。当你按下一个键时,这个键的扫描码就被传给系统。扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。然后操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队。最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就知道键盘上哪个键被按下,也就可以决定该作出什么响应给用户了。这个过程可以简单的如下表示:
用户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件插入消息队列-----键盘消息被发送到当前活动窗口明白了这个过程,我们就可以编程实现在其中的某个环节来模拟键盘操作了。在VB中,有多种方法可以实现键盘模拟,我们就介绍几种比较典型的。

从上面的流程可以看出,键盘事件是最终被送到活动窗口,然后才引起目标程序响应的。那么最直接的模拟方法就是:直接伪造一个键盘消息发给目标程序。哈哈,这实在是很简单,windows提供了几个这样的API函数可以实现直接向目标程序发送消息的功能,常用的有SendMessagePostMessage,它们的区别是PostMessage函数直接把消息仍给目标程序就不管了,而SendMessage把消息发出去后,还要等待目标程序返回些什么东西才好。这里要注意的是,模拟键盘消息一定要用PostMessage函数才好,用SendMessage是不正确的(因为模拟键盘消息是不需要返回值的,不然目标程序会没反应),切记切记!PostMessage函数的VB声明如下:
是你要发送消息的目标程序上某个控件的句柄,参数wMsg 是消息的类型,表示你要发送什么样的消息,最后wParamlParam 这两个参数是随消息附加的数据,具体内容要由消息决定。再来看看wMsg 这个参数,要模拟按键就靠这个了。键盘消息常用的有如下几个:
WM_SYSKEYUP  
表示一个系统键被释放,比如Alt如果你确定要发送以上几个键盘消息,那么再来看看如何确定键盘消息中的wParamlParam 这两个参数。在一个键盘消息中,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 ,第0-15位一般为&H0001,如果是按下键,那么24-31位为&H00,释放键则为&HC0,那么16-23位的扫描码怎么会得呢?这需要用到一个API函数MapVirtualKey,这个函数可以将虚拟码转换为扫描码,或将扫描码转换为虚拟码,还可以把虚拟码转换为对应字符的ASCII码。它的VB声明如下:
表示从什么转换为什么,如果是虚拟码转扫描码,则wMapType 设置为0,如果是虚拟扫描码转虚拟码,则wMapType 设置为1,如果是虚拟码转ASCII码,则wMapType

,很简单吧。值得注意的是,即使你发送消息时设置了lParam参数的值,但是系统在传递消息时仍然可能会根据当时的情况重新设置该参数,那么目标程序收到的消息中lParam的值可能会和你发送时的有所不同。所以,如果你很懒的话,还是直接把它设为0吧,对大多数程序不会有影响的,呵呵。
好了,做完以上的事情,现在我们可以向目标程序发送键盘消息了。首先取得目标程序接受这个消息的控件的句柄,比如目标句柄是12345,那么我们来对目标模拟按下并释放A键,像这样:(为了简单起见,lParam这个参数就不构造了,直接传0)
'
释放A好了,一次按键就完成了。现在你可以迫不及待的打开记事本做实验,先用FindWindowEx这类API函数找到记事本程序的句柄,再向它发送键盘消息,期望记事本里能诡异的自动出现字符。可是你马上就是失望了,咦,怎么一点反应也没有?你欺骗感情啊~~~~~~~~~~55 不是的哦,接着往下看啊。一般目标程序都会含有多个控件,并不是每个控件都会对键盘消息作出反应,只有把键盘消息发送给接受它的控件才会得到期望的反应。那记事本来说,它的编辑框其实是个edit类,只有这个控件才对键盘事件有反应,如果只是把消息发给记事本的窗体,那是没有用的。现在你找出记事本那个编辑框的句柄,比如是54321,那么写如下代码:
'
释放F1怎么样,是不是打开了记事本的帮助信息?这说明目标程序已经收到了你发的消息,还不错吧~~~~~~~~可以马上新问题就来了,你想模拟向记事本按下A这个键,好在记事本里自动输入字符,可是,没有任何反应!这是怎么一回事呢?
原来,如果要向目标程序发送字符,光靠WM_KEYDOWNWM_UP这两个事件还不行,还需要一个事件:WM_CHAR,这个消息表示一个字符,程序需靠它看来接受输入的字符。一般只有ABC等这样的按键才有WM_CHAR消息,别的键(比如方向键和功能键)是没有这个消息的,WM_CHAR消息一般发生在WM_KEYDOWN消息之后。WM_CHAR消息的lParam参数的含义与其它键盘消息一样,而它的wParam则表示相应字符的ASCII编码(可以输入中文的哦^_^),现在你可以写出一个完整的向记事本里自动写入字符的程序了,下面是一个例子,并附有这些消息常数的具体值:

这就是通过局部键盘消息来模拟按键。这个方法有一个极大的好处,就是:它可以实现后台按键,也就是说他对你的前台操作不会有什么影响。比如,你可以用这个方法做个程序在游戏中模拟按键来不断地执行某些重复的操作,而你则一边喝茶一边与QQ上的MM们聊得火热,它丝毫不会影响你的前台操作。无论目标程序是否获得焦点都没有影响,这就是后台模拟按键的原理啦~~~~

除了以上这些,用全局钩子也可以模拟键盘消息。如果你对windows中消息钩子的用法已经有所了解,那么你可以通过设置一个全局HOOK来模拟键盘消息,比如,你可以用WH_JOURNALPLAYBACK这个钩子来模拟按键。WH_JOURNALPLAYBACK是一个系统级的全局钩子,它和WH_JOURNALRECORD的功能是相对的,常用它们来记录并回放键盘鼠标操作。WH_JOURNALRECORD钩子用来将键盘鼠标的操作忠实地记录下来,记录下来的信息可以保存到文件中,而WH_JOURNALPLAYBACK则可以重现这些操作。当然亦可以单独使用WH_JOURNALPLAYBACK来模拟键盘操作。你需要首先声明SetWindowsHookEx函数,它可以用来安装消息钩子:
Long先安装WH_JOURNALPLAYBACK这个钩子,然后你需要自己写一个钩子函数,在系统调用它时,把你要模拟的事件传递给钩子参数lParam所指向的EVENTMSG区域,就可以达到模拟按键的效果。不过用这个钩子模拟键盘事件有一个副作用,就是它会锁定真实的鼠标键盘,不过如果你就是想在模拟的时候不会受真实键盘操作的干扰,那么用用它倒是个不错的主意。

如果上面的方法你都试过了,可是你发现目标程序却仍然顽固的不接受你模拟的消息,寒~~~~~~~~~还好,我还剩下最后一招,这就是驱动级模拟:直接读写键盘的硬件端口!
有一些使用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,那就这样
好了,现在的问题就是在VB中如何向端口写入数据了。因为在windows中,普通应用程序是无权操作端口的,于是我们就需要一个驱动程序来帮助我们实现。在这里我们可以使用一个组件WINIO来完成读写端口操作。什么是WINIOWINIO是一个全免费的、无需注册的、含源程序的WINDOWS2000端口操作驱动程序组件(可以到上去下载)。它不仅可以操作端口,还可以操作内存;不仅能在VB下用,还可以在DELPHIVC等其它环境下使用,性能特别优异。下载该组件,解压缩后可以看到几个文件夹,其中Release文件夹下的3个文件就是我们需要的,这3个文件是WinIo.sys(用于win 98下的驱动程序)WinIo.dll(封装函数的动态链接库),我们只需要调用WinIo.dll中的函数,然后WinIo.dll就会安装并调用驱动程序来完成相应的功能。值得一提的是这个组件完全是绿色的,无需安装,你只需要把这3个文件复制到与你的程序相同的文件夹下就可以使用了。用法很简单,先用里面的InitializeWinIo函数安装驱动程序,然后就可以用GetPortVal来读取端口或者用SetPortVal来写入端口了。好,让我们来做一个驱动级的键盘模拟吧。先把winio3个文件拷贝到你的程序的文件夹下,然后在VB中新建一个工程,添加一个模块,在模块中加入下面的winio函数声明:

定义了上面的过程后,就可以用它来模拟键盘输入了。在窗体模块中添加一个定时器控件,然后加入以下代码:

还应该注意的是,如果要从扩展键转换到普通键,那么普通键的KeyDown事件应该发送两次。也就是说,如果我想模拟先按下一个扩展键,再按下一个普通键,那么就应该向端口发送两次该普通键被按下的信息。比如,我想模拟先按下左方向键,再按下空格键这个事件,由于左方向键是扩展键,空格键是普通键,那么流程就应该是这样的:

好了,相信到这里,你的模拟按键程序也就差不多了,测试一下,是不是很有效呢,嘿嘿~~~~
WINIO
组件的下载地址:
 
方法3算是很底层的模拟了,我现在还没有发现有它模拟无效的程序。但是如果你用尽上面所有的方法,仍然无效的话,那么还有最后一个方法,绝对对任何程序都会有效,那就是:把键盘拿出来,老老实实地按下去吧。~~~~

}

我要回帖

更多关于 按键精灵错误代码1030 的文章

更多推荐

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

点击添加站长微信