找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6750|回复: 3

[教程源码] 按键精灵2014全局数组变量传递(支持静态与动态)V2

[复制链接]
  • 打卡等级:坠落山崖

1082

主题

2107

回帖

4291

积分

院长

鲜花
7
猫粮
7507
QQ
发表于 2018-10-12 20:43:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

最新版按键精灵2014已支持数组全局变量了,也就意味着以后多线程不需要再借助插件或字符串来传递数组内容了,不过静态数组与动态数组的用法还是稍微不同,具体例子如下:


[按键精灵] 纯文本查看 复制代码
Global 静态数组(2), 动态数组
静态数组(0) = "紫猫"
静态数组(1) = "老师"
静态数组(2) = "好帅"

动态数组 = Array("紫猫", "编程", "学院")

//注意, 启动多线程的参数是没有括号的, 也就是不能填写BeginThread(多线程())!
TID = BeginThread(多线程)

//等待多线程执行修改数组内容
Delay 1000

//主线程中静态数组也可以直接使用, 并且获取到修改后的值!!!
TracePrint "被修改后的静态数组: " & 静态数组(0) & "  " & 静态数组(1) & "  " & 静态数组(2)

//但是定义全局变量的动态数组无法直接输出, 会报错!!!
TracePrint "主线程的动态数组内容如下:  " & 动态数组(0) & "  " & 动态数组(1) & "  " & 动态数组(2)
//必须要通过赋值给一个变量, 再使用这个变量来输出动态数组内容!!!
Dim 数组
数组 = 动态数组
TracePrint "被修改后的动态数组: " & 数组(0) & " " & 数组(1) & " " & 数组(2)

Sub 多线程()
        TracePrint "启动多线程..."
        
        //下面的静态数组可以直接传递输出不会报错
        TracePrint "静态数组内容如下:  " & 静态数组(0) & "  " & 静态数组(1) & "  " & 静态数组(2)
        //修改后的值也可以直接传递, 见主线程里的输出
        静态数组(0) = "修改静态数组"
        
        
        
        //下面的动态数组如果直接传递会报错的!!!
        TracePrint "原动态数组内容如下:  " & 动态数组(0) & "  " & 动态数组(1) & "  " & 动态数组(2)
        
        //必须要通过赋值给一个变量, 再使用这个变量来输出动态数组内容!!!
        Dim Arr
        Arr = 动态数组
        TracePrint "Arr数组内容如下:  " & Arr(0) & "  " & Arr(1) & "  " & Arr(2)
        //如果修改了这个动态数组后想更新到全局变量中, 则必须重新赋值给全局动态数组变量, 否则无法更新全局变量值
        Arr(0) = "修改动态数组"
        动态数组 = Arr
        
        
        
        //而且神奇的是静态数组的数据类型是Empty, 动态数组的数据类型是Variant()
        TracePrint VarType(静态数组)
        TracePrint VarType(动态数组)
End Sub

总结:
  • 在全局变量或环境变量中,静态数组比动态数组更加使用方便。
  • 静态数组不需要做任何特殊处理,以前怎么用,多线程里就怎么用。
  • 要获取全局或环境变量的动态数组,必须要通过赋值给另一个变量后,使用该变量取值。
  • 如果要更新全局或环境变量的动态数组,则必须要对动态数组重新赋值。





2018年10月14日更新:

由于动态数组在多线程中取值与赋值不方便, 特别是赋值还容易造成线程冲突, 故不是特别推荐使用, 如果一定要用的话, 可以考虑使用下面例子中的getDynArr()和setDynArr()两个函数来实现。


[按键精灵] 纯文本查看 复制代码
Global 动态数组
动态数组 = Array("紫猫", "编程", "学院")
TracePrint "主线程, 数组全部内容:" & join(动态数组, ", ")

TracePrint "主线程, 修改前: " & getDynArr(动态数组, 1)
动态数组 = setDynArr(动态数组, 1, "老师")
TracePrint "主线程, 修改后: " & getDynArr(动态数组, 1)

BeginThread 多线程
Delay 1000

TracePrint "主线程, 线程修改后数组全部内容: " & join(动态数组, ", ")

/**********
* 函数 getDynArr 
* 功能 获取全局动态数组或环境动态数组的元素值
* 原型 元素值 = getDynArr(动态数组, 下标)
* 参数 动态数组, 数组型, 动态数组变量
* 参数 下标, 整数型, 动态数组下标
* 返回 动态数组的元素值
**********/
Function getDynArr(动态数组, 下标)
        getDynArr = 动态数组(下标)
End Function

/**********
* 函数 setDynArr 
* 功能 修改全局动态数组或环境动态数组的元素值
* 原型 动态数组 = setDynArr(动态数组, 下标, 内容)
* 参数 动态数组, 数组型, 动态数组变量
* 参数 下标, 整数型, 动态数组下标
* 参数 内容, 任意类型, 新的内容
* 返回 新的动态数组
**********/
Function setDynArr(动态数组, 下标, 内容)
        动态数组(下标) = 内容
        setDynArr = 动态数组
End Function

Sub 多线程()
        TracePrint "多线程, 数组全部内容:" & join(动态数组, ", ")
        
        TracePrint "多线程, 修改前: " & getDynArr(动态数组, 2)
        动态数组 = setDynArr(动态数组, 2, "真帅")
        TracePrint "多线程, 修改后: " & getDynArr(动态数组, 2)
End Sub
楼主热帖

0

主题

1

回帖

1

积分

按键电脑&手机班学员

鲜花
0
猫粮
27
发表于 2018-10-12 21:26:35 | 显示全部楼层
好消息♪(^∇^*)

18

主题

48

回帖

104

积分

按键电脑&手机班学员

紫猫助手

鲜花
0
猫粮
494
QQ
发表于 2018-10-14 08:35:34 | 显示全部楼层
(^-^)V跟以前是不一样,这个更新了,使用起来方便多了
承接PC版插件定制,Office办公软件辅助,网页相关[Post,Get]软件定制,网页批量注册或采集功能定制.等,点击我>>>租售网络授权验证系统!

2

主题

24

回帖

28

积分

按键电脑&手机班学员

鲜花
0
猫粮
121
QQ
发表于 2018-10-14 11:04:22 | 显示全部楼层
让按键的多线程给搞的够头,这次好像好多了,发展这么多版本才刚开始支持o(∩_∩)o
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫猫编程学园

GMT+8, 2024-4-25 20:37

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表