• 按键精灵对VBS的支持


    VBSBegin…VBSEnd(VBS块)
    格式:
    VBSBegin
    ...
    VBSEnd
    用途:可以在VBS块的区域内随意的书写VBS语法指令。

    更多说明:
    由于彻底的转向VBS语言,会导致goto语句不能被兼容。很多的脚本也就无法自动转换。而其他脚本引擎也有各种各样的问题。综合考虑各种情况,我们决定重新回归到VBSBegin…VBSEnd的语法。
    为了简单起见,我们把语法分为两种,在VBSBegin…VBSEnd块内的,以及在VBSBegin…VBSEnd块外的。目前的所有语句都可以看作是VBSBegin…VBSEnd块外的。VBSBeginVBSEnd必须一一对应,它们所形成的区域不允许嵌套,也不允许有交叉。也就是说,下面的形式是不允许的:
    VBSBegin
                  VBSBegin
                         XXXXX
                         XXXXX
                  VBSEnd
    VBSEnd
    允许一个跨多行的VBS语句,如If…Then…End If出现在一个VBSBegin…VBSEnd块中,但是不允许一个跨多行的VBS语句出现在多个VBSBegin…VBSEnd块中。也就是说,下面的形式是不允许的:
    VBSBegin
           If … Then
    XXXX
    VBSEnd
    XXXX
    VBSBegin
           End If
    VBSEnd
    这就保证了VBS语言的定义是简单清晰的。

    VBSBegin…VBSEnd块外的语法除了沿用目前的所有语法之外,有如下的改动:

    以下的语句:MessageBoxSayStringPutAttachment后面的参数为固定的字符串时,应增加引号。如果没有引号,按键精灵将首先试图把参数当作一个表达式(包括变量)去解析,只有解析不成功的时候,才会把参数当成固定的字符串。
    就是说,如果写MessageBox  abc
    当有一个变量叫abc的时候,弹出对话框的内容将显示abc的值
    否则,将显示字符串abc
    而如果写成MessageBox  “abc”
    那么无论abc是不是变量名,弹出的对话框将总是显示字符串abc
    以下的两种语句合并
    SayStringSayExpression
    合并成为
    SayString
    也就是说,以后写SayExpression将会等价于SayString
    所有包含不止一个参数的语句,以前的参数分隔符是空格(这是按键1.0带来的设计,现在颇感后悔),现在觉得用逗号做分隔符是大势所趋。所以,改为以下的设计:
    目前在VBSBegin…VBSEnd块外,既可以使用空格作分隔,也可以使用逗号作分隔,但是推荐后者。保留了使用空格做分隔的功能,保证了旧脚本的兼容性。在VBSBegin…VBSEnd块内,则一律使用逗号作分隔。


    VBSBegin…VBSEnd块内的语法和现有的VBS语法完全相同
    而且以下的按键精灵语句,也可以在VBSBegin…VBSEnd块内直接使用,使用方法和块外基本相同:
    KeyPressKeyDownKeyUpKeyPressHKeyDownHKeyUpH

    LeftClickRightClickMiddleClickLeftDoubleClickLeftDownLeftUpRightDownRightUpLeftClickHRightClickHMiddleClickHLeftDoubleClickHLeftDownHLeftUpHRightDownHRightUpH

    MoveToMoveRMoveRH

    SaveMousePosRestoreMousePos

    LockMouseUnlockMouse

    WaitKeyGetLastKeyWaitClickGetLastClick

    Delay

    MessageBoxSayStringSayExpressionBeep

    EndScript

    PutAttachment


    当然,有个别细节上还是有所区别:
    1.                  包含多个参数的语句,在VBSBegin…VBSEnd块外推荐使用逗号作为参数分隔符,而块内则必须使用逗号。
    2.                  MessageBoxSayStringPutAttachment后面的参数为固定的字符串时,块外推荐使用引号把字符串内容括起来。而块内必须使用引号括起来。
    3.                  WaitKeyGetLastKeyWaitClickGetLastClick四个语句都各包含一个参数。在块外可以省略这个参数,而在块内不能省略这个参数。
    我相信这些细节用户应该很快可以习惯。

    以下的按键精灵语句可以在在VBSBegin…VBSEnd块内使用,使用方法有所变化。如下表所示:

    IfColor

    IfColor x y 颜色比较方式

    If CompColor (x,y,颜色,比较方式) Then

    注意,如果颜色一项是常数,则需要加&H前缀,表明这是16进制

    IfColor 0 0 ffffff 0

    变成

    If CompColor(0,0,&Hffffff,0) Then

    相当用VBS原有的If语句,加一个函数搞定

    VBSCall

    VBSCall [call][x=]函数名(参数列表)[@<vbs文件>]

    Import “vbs文件

    [x=]函数名(参数列表)

    支持了Import多个vbs文件进来,形成模块化程序

    Plugin

    Plugin [x=]插件名.函数名(参数列表)

    Import “dll 文件

    [x=]插件名.函数名(参数列表)

    语法和VBSCall保持了最大程度的一致性


    这里有一个小问题:为了让VBSBegin…VBSEnd块内方便的使用插件,目前的插件设计必须进行一些修改。目前,一个插件命令包含的信息是插件命令的名称,解释和实际调用地址。我们需要增加一个新的信息,就是这个插件命令包含的参数个数。但是这样一来,新的插件和旧的插件将会在二进制代码上不能兼容。为此,我决定增加一个“插件版本”的信息。以前的插件版本定为1.0。以后的插件版本定为2.0。按键6.1以后只支持版本2.0的插件。因为现在用户自编的插件还不多,我们只需要把官方插件升级到2.0版本(这个工作目前已经完成),再相应的修改插件模版源码、插件教程就可以了。

  • 相关阅读:
    NOIP2015 D1 解题报告
    2017.10.2 国庆清北 D2T2 树上抢男主
    2017.10.6 国庆清北 D6T3 字符串
    2017.10.1 国庆清北 D1T2 两个逗比捉迷藏
    电压驱动和电流驱动
    电子管
    点亮板载LED
    ESP8266——一般控制方法
    ESP8266——CPU频率更改和深度睡眠模式
    ESP8266——ADC
  • 原文地址:https://www.cnblogs.com/lbnnbs/p/4781976.html
Copyright © 2020-2023  润新知