脚本语言运用(VBScript)

VBScript 使用 ActiveX(R)脚本与宿主应用程序对话。使用 ActiveX Script,浏览器和其他宿主应用程序不再需要每个脚本部件的特殊集成代码。ActiveX脚本使宿主可以编译 Script、获取和调用入口点及管理开发者可用的命名空间。通过 ActiveX Script,语言厂商可以建立标准脚本运行时语言。Microsoft 将提供 VBScript 的运行时支持。

做过工控的人都知道,对脚本语言的支持是标准组态软件应具备的一个基本功能(如iFix,组态王等)。如果我们用VB开发类似的功能,能实现吗?

想必大家都知道微软提供了Micrsoft Script Control 1.0 控件,在VB版也见到了大家对这个控件的使用(如用ExecuteStatement方法执行脚本命令 ExecuteStatement("msgbox “你好””)??? )。但最重要的一点,ActiveX脚本与宿主应用程序数据交互与传递,却没有完整的解决方案。

我也是探索了很长一段时间,才摸索出一点数据传递与交互的技巧,现在共享出来,供大家讨论研究。

示例程序介绍:

1、首先加载Micrsoft Script Control 1.0 控件。

对它基本上不用配置,默认语言VBScript,对该部分的介绍请下载VBScript命令集 (http://blog.csdn.net/yefanqiu   【叶帆资源】[03] VBScript指令集)

2、添加一个窗体(frmTest),里面添加如下代码:

'************************************************************************* '**模 块 名:frmTest '**说 明:YFsoft 版权所有2004 - 2005(C) '**创 建 人:叶帆 '**日 期:2004-10-15 11:00:32 '**修 改 人: '**日 期: '**描 述:脚本语言运用探索 '**版 本:V1.0.0 '************************************************************************* Option Explicit '************************************************************************* '**函 数 名:chkRun_Click '**输 入:无 '**输 出:无 '**功能描述:脚本运行控制 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 11:19:31 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Private Sub chkRun_Click() If chkRun.value = 1 Then tmrRun.Interval = cmbRunTime.Text '运行间隔 tmrRun.Enabled = True '开始运行 以固定间隔循环运行 txtEdit.Enabled = False Else tmrRun.Enabled = False '停止运行 txtEdit.Enabled = True End If End Sub '************************************************************************* '**函 数 名:cmbType_Click '**输 入:无 '**输 出:无 '**功能描述:操作类型切换 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 12:56:19 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Private Sub cmbType_Click() cmdSCDemo1_Click End Sub '************************************************************************* '**函 数 名:cmdRun_Click '**输 入:无 '**输 出:无 '**功能描述:单次运行脚本 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 11:51:29 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Private Sub cmdRun_Click() Call tmrRun_Timer End Sub '************************************************************************* '**函 数 名:cmdSCDemo1_Click '**输 入:无 '**输 出:无 '**功能描述:参数传递演示 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 11:03:29 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Private Sub cmdSCDemo1_Click() Dim strType As String '内部变量定义 类似组态王中的数据字典 valMem.Clear valMem.SetValue "Value1", txtValue(0) valMem.SetValue "Value2", txtValue(1) valMem.SetValue "Value3", 0 Select Case cmbType.ListIndex Case 0: strType = "+" Case 1: strType = "-" Case 2: strType = "*" Case 3: strType = "/" End Select txtEdit = "dim lngValue1" & vbCrLf txtEdit = txtEdit & "dim lngValue2" & vbCrLf txtEdit = txtEdit & "dim lngValue3" & vbCrLf txtEdit = txtEdit & "lngValue1=vm.getvalue(" & Chr(34) & "Value1" & Chr(34) & ")" & vbCrLf txtEdit = txtEdit & "lngValue2=vm.getvalue(" & Chr(34) & "Value2" & Chr(34) & ")" & vbCrLf txtEdit = txtEdit & "lngValue3=CInt(lngValue1)" & strType & "CInt(lngValue2)" & vbCrLf txtEdit = txtEdit & "vm.setvalue " & Chr(34) & "Value3" & Chr(34) & ",lngValue3 " & vbCrLf End Sub '************************************************************************* '**函 数 名:cmdSCDemo2_Click '**输 入:无 '**输 出:无 '**功能描述:对象操作演示 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 13:41:23 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Private Sub cmdSCDemo2_Click() txtEdit = "dim lngC" & vbCrLf txtEdit = txtEdit & "lngC=clng(fm.txtdemo.text)" & vbCrLf txtEdit = txtEdit & "lngC=lngC+10" & vbCrLf txtEdit = txtEdit & "if lngC>255 then lngC=0" & vbCrLf txtEdit = txtEdit & "fm.picdemo.backcolor=rgb(lngC,0,0)" & vbCrLf txtEdit = txtEdit & "fm.txtdemo.text=cstr(lngC)" & vbCrLf End Sub '************************************************************************* '**函 数 名:Form_Load '**输 入:无 '**输 出:无 '**功能描述:初始化 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 11:13:03 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Private Sub Form_Load() '添加参数运用的 内部可使用的变名 外部实际变量名 scCommand.AddObject "vm", valMem, True '向脚本添加外部可用的对象 '最后一个参数: True表示它的子类属性方法在脚本中可以操作 false 表示今该对象本身的方法属性可用 scCommand.AddObject "fm", Me, True '脚本运行间隔设置 cmbRunTime.ListIndex = 0 '参数操作类型 cmbType.ListIndex = 0 End Sub '************************************************************************* '**函 数 名:tmrRun_Timer '**输 入:无 '**输 出:无 '**功能描述:脚本运行 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 11:29:46 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Private Sub tmrRun_Timer() On Error GoTo ToExit '打开错误陷阱 '------------------------------------------------ Dim i As Long '参数输入 valMem.SetValue "Value1", txtValue(0).Text valMem.SetValue "Value2", txtValue(1).Text valMem.SetValue "Value3", 0 '脚本运行 scCommand.ExecuteStatement txtEdit.Text '参数输出 lstValueOut.Clear For i = 1 To valMem.Count lstValueOut.AddItem valMem.GetValue("", i) Next '------------------------------------------------ Exit Sub '---------------- ToExit: txtError = "错 误 号:" & Err.Number & " 时间:" & Format(Now, "YYYY-MM-DD HH:MM:SS") & vbCrLf txtError = txtError & "错误信息:" & Err.Description & vbCrLf txtError = txtError & "错误来源:" & Err.Source End Sub

3、添加一个模块(mdlBase),里面添加如下代码:

'************************************************************************* '**模 块 名:mdlBase '**说 明:YFsoft 版权所有2004 - 2005(C) '**创 建 人:叶帆 '**日 期:2004-10-15 11:10:58 '**修 改 人: '**日 期: '**描 述:公共变量区 '**版 本:V1.0.0 '************************************************************************* Option Explicit Public valMem As New clsScriptIO '脚本语言参数交换的变量设置区

4、添加一个类(clsScriptIO),类名为clsScriptIO,里面添加如下代码:

'************************************************************************* '**模 块 名:clsScriptIO '**说 明:YFsoft 版权所有2004 - 2005(C) '**创 建 人:叶帆 '**日 期:2004-10-15 11:56:32 '**修 改 人: '**日 期: '**描 述:与脚本语言参数交互的类模块 '**版 本:V1.0.0 '************************************************************************* Option Explicit Private cltScriptMem As New Collection '变量设置区 '************************************************************************* '**函 数 名:Count '**输 入:无 '**输 出:(Variant) - '**功能描述:内存变量个数 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 12:00:57 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Public Property Get Count() As Variant Count = cltScriptMem.Count End Property '************************************************************************* '**函 数 名:GetValue '**输 入:strKey(String) - 变量名称 '** :Optional lngNo(Long = 0) - 变量索引 '**输 出:(Variant) - 返回值 '**功能描述:取得制定名称的变量值 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 12:01:59 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Public Function GetValue(strKey As String, Optional lngNo As Long = 0) As Variant On Error GoTo ToExit '打开错误陷阱 '------------------------------------------------ If lngNo > 0 Then '如果输入索引号,则返回索引号指定的变量 GetValue = cltScriptMem.Item(lngNo) Else GetValue = cltScriptMem.Item(strKey) End If '------------------------------------------------ Exit Function '---------------- ToExit: End Function '************************************************************************* '**函 数 名:SetValue '**输 入:strKey(String) - 变量名 '** :value(Variant) - 设置变量 '**输 出:无 '**功能描述:为指定的变量赋值 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 12:07:05 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Public Sub SetValue(strKey As String, value As Variant) On Error GoTo ToExit '打开错误陷阱 '------------------------------------------------ cltScriptMem.Remove (strKey) cltScriptMem.Add value, strKey '------------------------------------------------ Exit Sub '---------------- ToExit: Resume Next End Sub '************************************************************************* '**函 数 名:DelValue '**输 入:strKey(String) - 变量名 '** :Optional lngNo(Long = 0) -索引号 '**输 出:无 '**功能描述:删除制定的变量 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 12:08:55 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Public Sub DelValue(strKey As String, Optional lngNo As Long = 0) On Error GoTo ToExit '打开错误陷阱 '------------------------------------------------ If lngNo > 0 Then '如果输入索引号,则删除索引号指定的变量 cltScriptMem.Remove (lngNo) Else cltScriptMem.Remove (strKey) End If '------------------------------------------------ Exit Sub '---------------- ToExit: End Sub '************************************************************************* '**函 数 名:Clear '**输 入:无 '**输 出:无 '**功能描述:删除变量 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-10-15 13:15:15 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Public Sub Clear() On Error GoTo ToExit '打开错误陷阱 '------------------------------------------------ While cltScriptMem.Count > 0 cltScriptMem.Remove (1) Wend '------------------------------------------------ Exit Sub '---------------- ToExit: Resume Next End Sub

功能演示:

1、  参数传递(单击【传递参数演示】按钮,自动添加相应脚本代码。可以执行加减乘除等操作。

 

下图演示了错误捕捉(被0除错误)

2、对象操作(单击【对象操作演示】按钮,自动添加相应脚本代码。可以执行控件的赋值和背景色变化操作。

源码下载地址:

http://blog.csdn.net/yefanqiu   【叶帆源码】[011] VBScript脚本运用

脚本语言运用(VBScript)叶帆相关推荐

  1. ASP脚本语言之vbscript用法

    常用的脚本语言有 Javascript 和 VBscript . 使用哪种语言需先设定.如上节代码中的<%@ LANGUAGE="JSCRIPT"   ...    %> ...

  2. 编译性语言、解释性语言和脚本语言的区别

    计算机是不能理解高级语言,当然也就不能直接执行高级语言了.计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算机才能运行高级语言编写的程序. 一.翻译和解释的不同 翻译的方式有两种 ...

  3. 编译性语言、解释性语言和脚本语言

    什么是编译性语言.解释性语言和脚本语言 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能值型高级语言编写的程序. 翻译的方式有两种,一个是编译,一个是解 ...

  4. 菜鸟初识脚本 and 脚本语言

    让我们先来查一下script的中文意思 script中文之意 script [skript] n.脚本:手迹:书写用的字母 vt.把-改编为剧本 vi. 写电影脚本 _________________ ...

  5. fceux源码解析_FCEUX金手指加强版 - 使用Lua脚本语言编写FC/NES金手指脚本

    一直觉得大部分的FC/NES模拟器的作弊码金手指不是那么方便使用, 比如魂斗罗1代, 玩家的武器可以通过修改0xAA的值来改变: 0x11为M弹(重机枪),0x12为F弹(圈圈),0x13为S弹(散弹 ...

  6. ASP程序所使用的几种脚本语言

    在浏览器中通过查看源代码的方式是无法看到ASP源代码的,你只能看到由ASP文件输出的结果,而那些只是纯粹的HTML而已.这是因为,在结果被送回浏览器前,脚本已经在服务器执行了. 实例: 用ASP写文本 ...

  7. ASP程序中常用的脚本语言

    在浏览器中通过查看源代码的方式是无法看到ASP源代码的,你只能看到由ASP文件输出的结果,而那些只是纯粹的HTML而已.这是因为,在结果被送回浏览器前,脚本已经在服务器执行了. 实例: 用ASP写文本 ...

  8. 脚本语言语言脚本语言:Shell , JavaScript、VBScript、Perl、PHP、Python、Ruby、Lua

    今天一直在研究脚本语言语言之类的问题,上午正好有机会和大家共享一下. 脚本语言:Shell , JavaScript.VBScript.Perl.PHP.Python.Ruby.Lua 工作控制语言和 ...

  9. VBScript脚本语言基础

    VBScript脚本语言基础 2.1 vbs脚本语言简介 2.2 第一个vbs脚本语言–hello world 打开记事本程序,在编辑窗口填写,保存文件的扩展名为:.vbs 对话框: 输入框 inpu ...

最新文章

  1. Thrift的服务器和客户端Python案例
  2. oracle的用户账号密码设置
  3. 解析XML时,需要校验节点是否闭合,如必须有与之对应,用()数据结构实现比较好?
  4. leetcode - 101. 对称二叉树
  5. 安卓开发仿微信图片拖拽_Android 仿微信朋友圈发表图片拖拽和删除功能
  6. 微信小程序-组件使用
  7. tinycc update VERSION to 0.9.27
  8. linux mysql 密码策略_Linux Ubuntu 14 MySQL 密码策略(复杂度)和审计插件
  9. 网站开发项目的需求分析
  10. 【论文笔记】Video Transformer Network
  11. Mybatis 异常(SQL 语法异常 ambiguous)
  12. 计算机常温环境,计算机CPU温度70度正常吗?电脑cpu常温简介
  13. Q绑查询HTML源码
  14. 为什么买入不了创业版_两点原因,为什么现在不建议你买创业板
  15. adt变频器故障代码ol2_变频器常见故障代码及处理实例
  16. 学习 慕课网【 PHP工程师计划】
  17. JRE和JDK的区别(笔记)
  18. BIOS/固件设置中禁用Intel VT-x
  19. 从零实现Transformer、ChatGLM-6B、本地知识库、模型(训练/推理)加速
  20. 码、候选码、主码、全码和外码的区分

热门文章

  1. Python QQ窗口隐藏显示
  2. Drools语法进阶
  3. mysql 组复制详解,MySQL组复制:魔力解释v2
  4. 【递归】两道程序题理解递归
  5. 初级爬虫师_成为初级设计师并不那么骄傲
  6. JDBC环境变量配置
  7. javascript 处理异常的方式
  8. VB.NET版机房收费系统---报表
  9. map+area标签
  10. Project Euler 19 Counting Sundays( 蔡勒公式计算星期数 )