按键精灵知多少之环境变量
供稿人:
601112024 编辑:按键学院学员267 环境变量有什么功用呢? 让我们来比如下,比如在多线程里传递变量值,普通的变量是做不到的,环境变量可以。那可能有同学会说,那全局变量也可以啊。对啊,但是环境变量还有更牛逼的地方,它可以在脚本之间进行值传递,啧啧~这逆天的作用域~赶快~让我们深入了解下它~ |
第一问:环境变量到底是个啥?
命令名称: | DimEnv 定义环境变量 |
命令功能: | 定义环境变量,支持QUI事件、支持多线程、 支持两个脚本间的值传递,但是不支持数组定义为环境变量。 |
命令参数: | 参数变量名备注: 1、在子程序里定义变量不可以为环境变量 2、不支持数组定义为环境变量 |
返 回 值: | 无 |
看了上面的表格还是不懂怎么破?
没关系,这表格只是一个助攻打酱油的。
俗话说,
“好记性不如烂笔头”哈,看文字不如实战,咱们动手做两个例子脚本,来解剖下这个环境变量。
脚本间环境变量值传递例子:- 您所在的用户组无法下载或查看附件
先新建两个脚本 :a和b
a 脚本里输入代码:
b脚本里输入代码:
- Dimenv a
- a = a+1
- MessageBox a
复制代码a脚本的启动热键设置为F9
b脚本的启动热键设置为F10
然后我们启动脚本,先启动a脚本:
- 您所在的用户组无法下载或查看附件
变量a的值是空的
我们接着启动b脚本:
- 您所在的用户组无法下载或查看附件
变量a的值是1,我们现在再去启动下a脚本,如果说环境变量的值不能在脚本间传递的话,启动a脚本,变量a的值肯定还是空是不是? 我们来看下结果,启动a脚本:
- 您所在的用户组无法下载或查看附件
a脚本里变量a的值变了有木有,不再是空的而是1。说明环境变量可以在脚本间传递值。
我们多执行几次a和b脚本,会发现,a脚本里的变量a的值会随着b脚本里变量a的值变化。
第二问:环境变量里的值能保存多久?
可能有同学会有这样的疑问,环境变量里的值能保存多久?
这里就需要注意了, 环境变量的值定义之后,要完全退出按键精灵之后环境变量里存储的值才会重置归零。
第三问:环境变量不支持数组怎么办?
前面说过,环境变量不支持数组。那怎么办?
我们看看下面例子中的做法,
没看之前根本想不到,原来要传递环境变量数组如此简单:假设数组b里有四个数值1,2,3,4,
1、我们定义一个环境变量a
2、先把数组b里的值用 链接函数join链接起来,赋值给环境变量a
a=join(b,",") //加上分隔符“,”,方便后面分隔
简单的两步就可以实现了,相当于将环境变量作为一个容器,先把要保存的数组倒进去,要调用的时候,我们再新建一个数组,用split函数把保存在环境变量里的数组再倒出来。
Join函数
| Join(list[,delimiter]) |
参数 | 描述 |
list | 必选。包含要联接的子字符串一维数组。 |
delimiter | 可选。在返回字符串中用于分隔子字符串的字符。如果省略,将使用空字符 ("")。 如果 delimiter 是零长度字符串,则在同一列表中列出全部项,没有分界符。
|
Split函数 | Split(expression[, delimiter[, count[, start]]]) |
参数 | 描述 |
expression | 必选。[url="]字符串表达式[/url],包含子字符串和分隔符。如果 expression 为零长度字符串,Split 返回空数组,即不包含元素和数据的数组。 |
delimiter | 可选。用于标识子字符串界限的字符。如果省略,使用空格 ("") 作为分隔符。如果 delimiter 为零长度字符串,则返回包含整个 expression 字符串的单元素数组。 |
count | 可选。被返回的子字符串数目,-1 指示返回所有子字符串。 |
compare | 可选。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。 |
代码如下(多线程里利用环境变量传递数组):
- //多线程中使用数组传递例子: />
- DimEnv a
- Dim b(3)
- b(0)=1
- b(1)=2
- b(2)=3
- b(3)=4
- //合并数组内容 />
- a=join(b,",")
- BeginThread 多线程
- //下面的循环是固定格式,必须这么做 />
- Do
- Delay 500
- Loop
- Sub 多线程()
- Dim 数组
- MsgBox a
- //分解数组内容 />
- 数组=split(a,",")
- MsgBox 数组(0)
- MsgBox 数组(1)
- MsgBox 数组(2)
- MsgBox 数组(3)
- EndScript
- End Sub
复制代码数组成功传进了多线程里,大家可以尝试把 定义a为环境变量的这句代码去掉运行看看:[backcolor=rgb(247, 247, 247)]DimEnv a 。 a的值是空的并且提示下标越界对吗?
为什么a的值是空的呢? 因为普通变量是不能传递到多线程里的,环境变量支持多线程值传递。 拓展知识:全局变量Global 也支持多线程,它的作用域是整个脚本。
第四问:环境变量赋值定义还有其他方式吗?
经过前面的例子,我们大概清楚了环境变量到底是个啥了。那我们再深入了解下,我们知道,定义环境变量,首先要用DimEnv去声明变量,然后赋值,那还有没有其他的方法呢?
答案是肯定的,当然有,按键自带的指令也是可以实现的,
假设我们要定义环境变量a,并且定义a为长整型
代码如下:
- '声明环境变量 返回true(-1)表示成功 等同于DimEnv a
- TracePrint SetEnv("a", vbLong)
- '对环境变量赋值 返回true(-1)表示成功 等同于a= 1000
- TracePrint SetEnv("a", 1000)
- '读取环境变量的值 返回读取到的值 等同于 tmp = a : TracePrint tmp
- TracePrint GetEnv("a")
复制代码注意这里的变量名不能为中文。
运行结果:
- 您所在的用户组无法下载或查看附件
SetEnv——定义环境变量 语法: SetEnv "变量名称", 赋值
GetEnv——读取环境变量值 语法: GetEnv (“变量名称”)
这种方式比较麻烦,定义的变量,需要读取才能使用,也就是说我们SetEnv 定义了一个环境变量,要用它的时候,就一定要用GetEnv读取出来。
大家对环境变量有没有其他的独到认识呢?欢迎一起讨论分享~~~ 本文由按键学院提供技术支持
按键学院实战班(入驻最终幻想)火热招生
按键学院基础视频抢先观看