• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

返回列表 12345678» / 15
发新话题 回复该主题

[技术交流] 【院刊】-【201409期】按键精灵知多少之环境变量 [复制链接]

1#

按键精灵知多少之环境变量


供稿人:601112024 编辑:按键学院学员267
环境变量有什么功用呢? 让我们来比如下,比如在多线程里传递变量值,普通的变量是做不到的,环境变量可以。那可能有同学会说,那全局变量也可以啊。对啊,但是环境变量还有更牛逼的地方,它可以在脚本之间进行值传递,啧啧~这逆天的作用域~赶快~让我们深入了解下它~

第一问:环境变量到底是个啥?





命令名称: DimEnv 定义环境变量
命令功能:定义环境变量,支持QUI事件、支持多线程、 支持两个脚本间的值传递,但是不支持数组定义为环境变量。
命令参数: 参数变量名备注: 1、在子程序里定义变量不可以为环境变量 2、不支持数组定义为环境变量
返 回 值:

看了上面的表格还是不懂怎么破?
没关系,这表格只是一个助攻打酱油的。
俗话说,“好记性不如烂笔头”哈,看文字不如实战,咱们动手做两个例子脚本,来解剖下这个环境变量。


脚本间环境变量值传递例子:

您所在的用户组无法下载或查看附件




先新建两个脚本 :a和b

a 脚本里输入代码:

  1. Dimenv a
  2. MessageBox a
复制代码

b脚本里输入代码:

  1. Dimenv a
  2. a = a+1
  3. 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 可选。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。


代码如下(多线程里利用环境变量传递数组):

  1. //多线程中使用数组传递例子: />
  2. DimEnv a
  3. Dim b(3)
  4. b(0)=1
  5. b(1)=2
  6. b(2)=3
  7. b(3)=4
  8. //合并数组内容 />
  9. a=join(b,",")
  10. BeginThread 多线程
  11. //下面的循环是固定格式,必须这么做 />
  12. Do
  13. Delay 500
  14. Loop
  15. Sub 多线程()
  16. Dim 数组
  17. MsgBox a
  18. //分解数组内容 />
  19. 数组=split(a,",")
  20. MsgBox 数组(0)
  21. MsgBox 数组(1)
  22. MsgBox 数组(2)
  23. MsgBox 数组(3)
  24. EndScript
  25. End Sub
复制代码
数组成功传进了多线程里,大家可以尝试把 定义a为环境变量的这句代码去掉运行看看:[backcolor=rgb(247, 247, 247)]DimEnv a 。 a的值是空的并且提示下标越界对吗? 为什么a的值是空的呢? 因为普通变量是不能传递到多线程里的,环境变量支持多线程值传递。
拓展知识:全局变量Global 也支持多线程,它的作用域是整个脚本。


第四问:环境变量赋值定义还有其他方式吗?



经过前面的例子,我们大概清楚了环境变量到底是个啥了。那我们再深入了解下,我们知道,定义环境变量,首先要用DimEnv去声明变量,然后赋值,那还有没有其他的方法呢?


答案是肯定的,当然有,按键自带的指令也是可以实现的,

假设我们要定义环境变量a,并且定义a为长整型


代码如下:

  1. '声明环境变量 返回true(-1)表示成功 等同于DimEnv a
  2. TracePrint SetEnv("a", vbLong)

  3. '对环境变量赋值 返回true(-1)表示成功 等同于a= 1000
  4. TracePrint SetEnv("a", 1000)

  5. '读取环境变量的值 返回读取到的值 等同于 tmp = a : TracePrint tmp
  6. TracePrint GetEnv("a")
复制代码

注意这里的变量名不能为中文。


运行结果:

您所在的用户组无法下载或查看附件




SetEnv——定义环境变量 语法: SetEnv "变量名称", 赋值

GetEnv——读取环境变量值 语法: GetEnv (“变量名称”)


这种方式比较麻烦,定义的变量,需要读取才能使用,也就是说我们SetEnv 定义了一个环境变量,要用它的时候,就一定要用GetEnv读取出来。



大家对环境变量有没有其他的独到认识呢?欢迎一起讨论分享~~~




本文由按键学院提供技术支持

按键学院实战班(入驻最终幻想)火热招生

按键学院基础视频抢先观看


    已有4评分我要评分查看所有评分

    本主题由 超级版主 瑞祥幽冥狼 于 2023/5/1 20:45:02 执行 审核帖子 操作
    <strong>按键学院交流群(开放中):376122403<br />
    <br />
    <a href="http://bbs.anjian.com/thread-548439-1-1.html" target="_blank">按键学院开班<strong> <font color="Red">【安卓导师】+【实战导师】招聘导师</font></strong>啦~~<font color="Red"><strong>待遇特别好,有钱,就是任性。</strong> </font></a><br />
    <br />
    <br />
    <a href="http://bbs.anjian.com/t
    2#

    刚好有这个问题,来看看……

    3#

    学习学习

    4#

    好记性不如烂笔头

    <strong><font size="4"><font color="#0000EE">★交流学习★</font></font></strong>
    5#


    6#

    好好学习,考试

    曲终人散
    7#

    好久没见你了

    8#


    9#

    在学习

    10#

    嗯,特来学习下

    11#


    12#

    了了了了了了了了了

    13#

    空间看看看看看看看看看

    14#

    332132132132123

    666
    15#

    学习了哈

    16#

    继续学习

    17#

    11111111111111

    18#

    这。。。。。。。

    19#

    看看 学习下学下下

    20#

    快快快快快

    发新话题 回复该主题