《Q语言是什么.docx》由会员分享,可在线阅读,更多相关《Q语言是什么.docx(16页珍藏版)》请在课桌文档上搜索。
1、Q语言是什么Q语言是什么?Q语言是在VBSeriPt的基础上发展起来,专用于按键精灵系列产品(包括但不限于按键精灵、按键小精灵、简洁游等)的一种易学易用、功能强大的脚本语言。Q语言以VBSCriPt为基础,去掉了少量不重要的功能,且增加了许多更易于运用,更符合国情的新功能。Q语言在按健精灵8.0中首次引入,与按健精灵7.X之前所运用的脚本语言基本保持兼容。无论对于老版本按键精灵的资深脚本作者,还是对于完全没有用按键精灵写过脚本的新手,都只须要简洁的适应和体会后,即可轻松上手。Q语言有哪些特点?我们希望我们希望Q语言成为一门更接近中国人说话的自然语言,那就是汉语.让Q语言来学习和适应人话,而不是
2、让人去学习机语,这是Q语言设计的最高宗旨和终极目标。因此,Q语言会供应下面的吩咐:1.按A键10次2.鼠标移动到坐标100,1003.打开QQk在屏幕范围内查找颜色为OOOOff的点让人享受对电脑发号施令的快感是Q语言的任务,让人不再做电脑的奴隶是Q语言的使命。假如肯定要让我们给Q语言加一个特点,那肯定就是人性做最人性的计算机语言。我们不希望我们不希望让Q语言看起来像一门编程语言,所以我们坚决不情愿拿一些高级语言的特点来包装I1.l己,譬如面对对象。我们也不希望让Q语言实现中文编程的宏大目标,已经有人在做而且做的很好,我们激励中文编程但不会去仿照。为什么要用Q语言?玩电脑,不要被电脑玩!Q语言
3、可以让您对电脑发号施令,让电脑去处理那些繁琐、蜜熨的工作。将您解脱出来享受更简洁、更健康的电脑生活。请记住,一切让您觉得有些烦的电脑操作都可以找Q语言免费帮忙。如何运用Q语言?您只须要下载支持Q语言的按键精灵8.0版软件,即可采纳动作录制+全界面吩咐操作的方式编写Q语言脚本。按键精灵下载地址:华丽的分割线,以下是Q语言编程资料,供应应高级脚本作者运用Q语言的脚本结构采纳Q语言编写的脚本,具结构比较简洁。总体上来说,一个脚本中的全部内容可以分为两大部分,一部分是子程序,一部分是主程序。子程序是指一对SubEndSub或FUnetiOnEndFUnCtiOn组合之间的内容,其他内容都称为主程序。子
4、程序和主程序可以穿插编写,比如下面的脚本是合法的:1.Subx2.子程序内容3.EndSub4.主程序内容5.Suby6.子程序内容7.EndSub8.主程序内容但是,子程序不行以嵌套,即子程序中不能再定义子程序,比如下面的脚本是非法的:1.Subx2.子程序内容3.Suby4.子程序内容5.EndSub6.子程序内容7.EndSub脚本在执行的时候,总是从第一条语句起先,当遇到子程序时,将臼动跳过,只有遇到主程序的语句时.,才会接着执行。当然,子程序可以被主程序或其他子程序调用,这点和一般的VBScript没有区分。脚本在执行完最终一条语句,或者执行到EndScript语句,或者遇到如用户按
5、下中止热健等外部事务时,将停止执行。脚本中任何以或者开头,至行尾为止的内容,都被看作是注释,在执行过程中会被忽视。Q语言的语法分类采纳Q语言编写的脚本,语法遵循两套不同的规则,一类是在VBSBeginVBSEnd之间包含的内容,称之为VBS语法规则;另一类则是在VBSBeginVBSEnd之外的内容,称之为Q语法规则。VBS或Q语法规则与上文所述的主程序和子程序并无任何因果关系,换言之,无论是主程序还是子程序,都既可以运用VBS语法,也可以运用Q语法。VBS语法规则与微软设定的VBScript语法完全相同,它不支持诸如Goto等在VBScript中并不包含的语法,也不支持ImportsUSer
6、Var、BeginThread等按键精利特有的功能,但由于采纳VBS语法规则的脚本具有较高的执行速度,并且也支持基本的按键精灵功能如KeyPress、MoveTo等,因此仍具有较大的好用价值。当然,Q语法在按键精灵中应用更为广泛,因为按键精灵的几乎全部功能都是由Q语法承载的,因此具有强大的脚本编写实力。下文介绍的各项语法特性,如无特殊说明,都是指Q语法规则。变量和VBScript类似,Q语言支持变量定义(包括数组),且全部的变量都只有一种类型,即Variant型(变体类型)。Q语言中定义变量的方法有三种,一种是采纳Dim语句定义,如Dima,b,c;其次种是采纳UServar语句定义,USCr
7、vHr语句的用法后文详述:第三种是采纳DimEnV语句定义,如DimEnva,b,Co变量也可以不定义而干脆运用(类似于VBScript),但在定义变量时,VBScript中的Private和Public关键字并不起作用。变量的类型和作用域:变量的类型分三种:局部变量、全局变量和环境变量,全部在子程序中用Dim定义的变量(包括子程序的参数)都是局部变量,全部在主程序中用Dim或UserVar定义的变量,或者没有定义而干脆运用的变量都是全局变量,全部用DimEnv语句定义的变量都是环境变量。局部变量和全局变量的含义VBScript类似:局部变量只在子程序中有效,退出子程序时将被清除:环境变量在整
8、个脚本中都有效。环境变量是Q语言特有的,它在某个产品所运行的全部脚本中都具有相同的值。环境变量初始化之后就始终保留。变量作用域的定义举例:1.UserVarvar=l自定义变量2.D加xl3.x2=24.DimEnvENVJ,R5.SubTest6.Dimy7.Z=38.Rcturnvar是全局变量:因为用Uservar定义的都是全局变量xl,x2是全局变量:因为在主程序中定义的变量都是全局变量,不管是否用了DIM关键字ENVJAR是环境变量:环境变量可以在多个脚本线程或者多个脚本之间共享y是局部变量:因为在子程序中运用DIM语句定义,只在子程序中有效z是全局变量:在子程序中没有用DIM进行定
9、义的变量都是全局变量。变量的命名规则:变量和常量,以及子程序的名称,还有后文将提到的Goto语句运用的标号,都具有完全相同的吩咐规则:可以采纳英文大小写字母或汉字开头,后面可以运用英文大小写字母或汉字或阿拉伯数字。如下面的变量定义是合法的:1.DimHello2.Dim你好3.DimHi12345但下面的变量定义不合法,因为变量命名不正确:1.Dim12345Hi2.Dim3.He=HoQ语言中关于数组的运用和规定与VBScript完全相同。变量功能和Ol版的主要区分:在Ol版的子程序中运用Dim定义的变量也是脚本级的,这样的话由Ol版自动转换为09版的脚本运行结果就可能不同。例子脚本:1.G
10、osubtest2.MessageBoxx3.Subtest4.CHmx5.X=26.Return转换方法:假如在SUB里用DIM定义了一个变量,我们干脆将DIM这一行删掉,变量就自动变为全局的。但要考虑DIM前后有其他语句的状况。常数和运算符Q语言中关于常数、运算符的运用和规定都与VBScript完全相同。除了可以用Const定义常数之外,Q语言与VBScript一样,都已经预定义了一系列的常数,如VbCr、VbCr1.f等。语句和VBSCriPl一样,在Q语言中支持下列语句。Dim/ReDimEraseCal1SetRandomizeConstExitDo/For/Sub/Function
11、DoWhile/Until1.oopDo1.oopWhile/UntilWhilcWcndForNcxtIfIfCoIorThenEIseIfThenEIseEndIfSelectCaseCaseCaseElseEndSelect上述语句的用法与VBScript中完全一样,但也允许存在下列的改变:1)Call语句与VBScript中的调用规则完全相同:当调用采纳SubEndSub定义的子程序时,只需过程名及全部参数值,参数值之间运用逗号分隔。不需运用Call语句,但假如运用了此语句,则必需将全部参数包含在括号之中:反之,当不运用Call语句进行调用时,括号被省略。当调用的子程序没有参数也没有返
12、回值时,可以将Cal1Process()简写为GosubPrOCeSSo这种简写只是为了保持兼容性而保留,今后不举荐运用。2) WhilcWend语句与VBScript中的运用方法完全相同,但Wend可以用EndWhile代替。我们举荐用Wend,目前EndWhile只是为了保持兼容性而保留。3) ForNext支持下面两种在VBSCriPt中的用法(斜体表示这里是一个变量或者表达式,方括号表示可选内容):Forcounter=startToendStepstepNextForEachelementIngroupNext还支持下面的用法:ForcountNext第三种用法是Q语言中特有的,详细
13、用法和7.X版本之前的按键精灵一样。在这种用法中,Next可以用EndFOr代替。我们举荐用Next,目前EndFor只是为了保持兼容性而保留。4) IfzifcolorThenElseIfThenElseEndIf主要支持以下两种用法IfThenElselfThenElseEndIfIfcolorThenEElseIfThenElseEndIf其中第一种用法和VBSCriPt中的条件分支用法完全一样。其次种用法则是Q语言中特有的,可以看作是专用于推断颜色的特例。无论上述哪种用法,都可以省略Then,也可以用EndIf代替EndIf0当然,我们仍旧举荐与VBScript尽量保持一样,即保留Th
14、en,并用EndIf0之所以仍旧支持EndIf并允许省略Then,都是为了保持兼容性。下面的语句是VBScript中所没有的,屈于Q语言中特有的内容。DDimEnv格式:DimEnvvarl,var2,var3含义:定义环境变量,同名的变量将在同一产品(按键精灵/按键小精灵/简洁游)的全部脚本中共享。备注:varl,var2可以是任何符合变量命名规则的变量名,建议在命名是加上env_前缀,表示这是个环境变量,和其他变量进行区分。例如env_xue兼容性说明:DimEnv定义的变量就走以前多线程中运用的SetEnv和GetEnv定义的变量。2)USerVar格式:UserVarvar=defau
15、ltdescriptionUserVarvar=Drop1.isttextl:valuelitext2:value2=defaultdescription含义:定义可由用户设置的变量,详细含义和按键精灵7.X之前类似,不再赘述。备注:var可以是任何符合变量命名规则的变量名。description,textl,text2通常是固定字符串,因此必需用双引号。如UserVar变量=1设置内容default,valuel,value2通常是固定的字符串或者数值,当运用字符串时,也必需用双引号。兼容性说明:这个吩咐在按键7的基础上做了优化。假如用户加上双引号,那么强制当作字符串运用,解决首字符为O时会
16、自动推断为数字的问题。3)Rem格式:Remlabel含义:定义标号label,作为Goto语句的目标地址。详细含义和按键精灵7.X之前类似,不再赘述。备注:label即标号可以是任何符合变量命名规则的名称。依据变量命名规则(如前文所述),如Rem标号是合法的但Rem0000是不合法的,因为首字符不能是数字且Rem一标号一也是不合法的,因为只支持英文字母、数字和汉字,不支持其他符号。因为REV、变量和SUB的命名采纳同一套规则,因此我们将调整为统一支持口_这3个符号。但这3个符号的支持仅作兼容,不做举荐。4)Goto格式:Gotolabel含义:跳转到标号Iabelo详细含义和按键精灵7X之前
17、类似,不再赘述。备注:Goto后面的Iabel必需用Rem语句定义过,且必需都定义在主程序中,或者都定义在同一个子程序中。5)Import格式:ImportfiIcname含义:导入插件或脚木库,filename表示插件文件名。假如已经采纳Import语句导入了插件,则以后插件的调用都可以简写为:Call插件名称.功能名称(参数列表)否则,假如没有提前用Import语句导入,则必需在调用时增加PlUgin.前缀,写为:CallPIUgin.插件名称.功能名称(参数列表)留意这里对插件的运用方法与7.X版本相比有所区分,脚本库Iib的运用方法和插件一样。备注:filename即插件文件名通常是固
18、定的字符串,因此必需用双引号。6)EndScript格式:EndScript含义:和按键精灵7.X之前类似,脚本执行到这里即无条件停止。7)BeginThread格式:BeginThrcadSUbname含义:启动一个线程,subname是一个脚本中已经定义的子程序的名字,详细含义和按键精灵7.X之前类似。备注:由于subname是一个子程序的名字,因此不能加双引号(留意这里和按键精武7.X之前有所区分),且SUbnanle的命名符合前文所述的变量命名规则。8)VBSBeginVBSEnd格式:1.VBSBegin2.3.4.VBSEnd含义:在VBSBeginVBSEnd中的内容只遵循VBS
19、CriPt语法,而不支持Q语言语法,也就是说,不能运用Q语言语法中特有的语句(但支持基本的按键精灵功能如KeyPress、MOVeTO等)。VBScript语法的优势是执行速度比较快,可以在对速度有特殊要求的场合运用。子程序和VBSCriPt类似,Q语言支持Sub和Function这两种子程序,两者的区分在于后者有返回值而前者没有。Sub子程序由关键字SubEndSub以及中间的多行语句构成,Function由关键字FunctionEndFunction以及中间的多行语句构成。在Function子程序中,允许通过给与Function子程序同名的隐含变量赋值而设置返回值。当Sub或Functio
20、n被调用时,通常当其中的语句执行完以后会H动返回调用处,同时,也允许在Sub或者FUnCtion子程序中分别运用ExitSub/ExitFunction,从而在子程序执行未结束时也能跳出子程序。Sub或者Function子程序都可以运用参数,参数由括号内的一组变量名组成,也就是说,参数的命名规则同变量命名规则一样,允许运用英文字母和中文,以及后续的数字。对于子程序的参数,Q语言和VBScript最大的区分在于,Q语言只支持传值,不支持传引用,因此也不支持参数的ByVal或ByRef等附件说明,而VBScript则可以通过在参数前面增加ByVal或ByRef的附加说明来选择传值还是传引用。Q语言
21、不支持传引用由于技术缘由造成的,今后会试图增加这项功能。总的来说,对于子程序的支持,Q语言和VBScript有以下几点不同:1)Q语言不支持参数传引用,仅支持参数传值,而VBScript两者都支持。2)VBScript的子程序(包括Sub和Function)没有参数时,仍旧必需写一对括号,而Q语言允许没有括号。当然,这种写法主要是为了兼容性的考虑,今后我们还是举荐有括号的写法。如Subname的写法,在Q语言中允许,但在VBScript中不允许。但是,我们仍旧举荐增加括号的写法,即SUbnanle()3)在Q语言中,EndSub可以用Return代替。这种写法也是为了兼容性的考虑,今后我们将举
22、荐运用比较正规的EndSub按键精灵供应了一系列以鼠标键盘模拟为代表的基本功能,全部这些功能都以预定义的子程序的形式出现。目前包括:KeyPresSsKeyDownKeyUp、1.eftClickRightClickMiddledickl1.eftDoubleClick,1.eftDown1.cftUp,RighIDOWn、RightUpMOVeTo、MoveRMouseWheelKeyPressI1.KeyDownFkKeyUpH、1.eftClickH、RightClickH、MiddleClickH.1.eftDoubleClickIk1.eftDownH.1.eftUpIKRightD
23、ownIkRightUpl1.MoveToH-,MoveRHxKcyPressSKeyDownSKCyUPS、1.eftClickS.RightClickS.MiddledickS1.eftDoubleClickS.1.eftDOWnS、1.eftUpS、RightDownS、RightUpS、MoveToS、MoveRS、SetSimMode、SaveMousePos、RestoreMousePos、1.ockMouse、UnIOCkMoUse、WaitKey-.Get1.astKeyWaitCiickGCl1.aStClick、Delay,MessageBox,Beep,SayString
24、、PUtAttaChment、TracePrintNRunApp-kGetCUrSorPOs、GctPixelColor,FindeOlor、FindCenterColor、FindColorEx、ReadMemory、FindPic、FindPicEx,GetCursorShape全部这些功能的用法都与按键精灵7.x中基本保持一样,个别用法与按键精灵7.X相比有所调整,如WaitKey-.Get1.astKey-.WaiIClick、Get1.astClick等等,详细的调整细微环节由其他文档详述。由于全部这些功能都是以预定义的子程序的形式出现的,因此,调用这些功能的格式与调用子程序完全一样
25、,如:1.MoveTo100,1002.key=WaitKeyO并且,全部这些功能都可以用于VBSBeginVBSEnd之间包括的符合VBS语法规则的脚本中,当然,用于QVS语法规则的脚本就更加没有问题了。插件除了上述基本功能外,还有许多扩展功能以插件的形式供应,按键精灵系列产品也有丰富的第三方插件,并且支持用户自己编写插件。如前文所述,插件功能的调用有两种形式:1)首先采纳Import语句导入插件,然后用下面的格式调用:Call插件名称.功能名称(参数列表)如下面的脚本可以把当前窗口最大化:1.Importwindow.dll2.hWnd=Window.ForegroundO3.CallWi
26、ndow.Max(hWnd)4.Window.MaxhWnd2)不做任何打算工作,干脆用下面的格式调用:CallPlUgin.插件名称.功能名称(参数列表)如下面的脚本可以把当前窗口最大化:1.hWnd=Plugin.Window.Foreground()2.Cal1Plugin.Window.Max(hWnd)3.Plugin.Window.MaxhWnd上面两种插件调用方法都只能用于VBSBeginVBSEnd之外,即符合QvS语法规则的脚本中。假如要用于VBSBeginVBSEnd之内,即符合VBS语法规则的脚本中,只有先在VBSBeginVBSEnd之外预先用ImPOrt语句导入插件,然后再用前面所述的第一种方法,在VBSBcginVBSEnd之内调用各项插件功能。吩咐库吩咐库是按键精灵8新引入的一个功能,可以将常用的脚木子程序放在吩咐库当中,供多个脚本调用。吩咐库的存放地址在按键精灵书目下的Iib书目里,以.qml为后缀。调用吩咐库的方法如下:Calllib.吩咐库名称.功能名称(参数列表)例如:Calllib.测试库.FuncA(100,200)