[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. ◎Adodb.Stream 的使用说明(转发)
  2.   ADODB.Stream组件是很重要的组件,以前一直找不全,先转过来有时间好好看看。
  3.   1、注册ADODB.Stream组件
  4.   regsvr32 "C:\Program Files\Common Files\System\ado\msado15.dll"
  5.   
  6.   2、使用说明
  7.   组件:"Adodb.Stream"
  8.   有下列方法:
  9.   Cancel 方法
  10.   使用方法如下
  11.   Object.Cancel
  12.   说明:取消执行挂起的异步 Execute 或 Open 方法的调用。
  13.   Close 方法
  14.   使用方法如下
  15.   Object.Close
  16.   :关闭对像
  17.   CopyTo 方法
  18.   使用方法如下
  19.   Object.CopyTo(destStream,[CharNumber])
  20.   说明:将对像的数据复制,destStream指向要复制的对像,CharNumber为可选参数,指要复制的字节数,不选为全部复制。
  21.   Flush 方法
  22.   使用方法如下
  23.   Object.Flush
  24.   说明:
  25.   LoadFromFile 方法
  26.   使用方法如下
  27.   Object.LoadFromFile(FileName)
  28.   说明:将FileName指定的文件装入对像中,参数FileName为指定的用户名。
  29.   Open 方法
  30.   使用方法如下
  31.   Object.Open(Source,[Mode],[Options],[UserName],[Password])
  32.   说明:打开对像,
  33.   参数说明:Sourece 对像源,可不指定
  34.   Mode 指定打开模式,可不指定,可选参数如下:
  35.   adModeRead =1
  36.   adModeReadWrite =3
  37.   adModeRecursive =4194304
  38.   adModeShareDenyNone =16
  39.   adModeShareDenyRead =4
  40.   adModeShareDenyWrite =8
  41.   adModeShareExclusive =12
  42.   adModeUnknown =0
  43.   adModeWrite =2
  44.   Options 指定打开的选项,可不指定,可选参数如下:
  45.   adOpenStreamAsync =1
  46.   adOpenStreamFromRecord =4
  47.   adOpenStreamUnspecified=-1
  48.   UserName 指定用户名,可不指定。
  49.   Password 指定用户名的密码
  50.   Read 方法
  51.   使用方法如下:
  52.   Object.Read(Numbytes)
  53.   说明:读取指定长度的二进制内容。
  54.   参数说明:Numbytes指定的要读取的找度,不指定则读取全部。
  55.   ReadText 方法
  56.   使用方法如下:
  57.   Object.ReadText(NumChars)
  58.   说明:读取指定长度的文本
  59.   参数说明:NumChars指定的要读取的找度,不指定则读取全部。
  60.   SaveToFile 方法
  61.   使用方法如下:
  62.   Object.SaveToFile(FileName,[Options])
  63.   说明:将对像的内容写到FileName指定的文件中
  64.   参数说明:FileName指定的文件
  65.   Options 存取的选项,可不指定,可选参数如下:
  66.   adSaveCreateNotExist =1
  67.   adSaveCreateOverWrite =2
  68.   SetEOS 方法
  69.   使用方法如下:
  70.   Object.setEOS()
  71.   说明:
  72.   SkipLine 方法
  73.   使用方法如下:
  74.   Object.SkipLine()
  75.   说明:
  76.   Write 方法
  77.   使用方法如下:
  78.   Object.Write(Buffer)
  79.   说明:将指定的数据装入对像中。
  80.   参数说明:Buffer 为指定的要写入的内容。
  81.   WriteText 方法
  82.   使用方法如下:
  83.   Object.Write(Data,[Options])
  84.   说明:将指定的文本数据装入对像中。
  85.   参数说明:Data 为指定的要写入的内容。
  86.   Options 写入的选项,可不指定,可选参数如下:
  87.   adWriteChar =0
  88.   adWriteLine =1
  89.   有下列属性:
  90.   Charset
  91.   EOS 返回对像内数据是否为空。
  92.   LineSeparator 指定换行格式,可选参数有
  93.   adCR =13
  94.   adCRLF =-1
  95.   adLF =10
  96.   Mode 指定或返加模式。
  97.   Position 指定或返加对像内数据的当前指针。
  98.   Size 返回对像内数据的大小。
  99.   State 返加对像状态是否打开。
  100.   Type 指定或返回的数据类型,可选参数为:
  101.   adTypeBinary =1
  102.   adTypeText =2
  103.   用了6行代码实现了无组件上传:
  104.   strFileName = Request.QueryString("file1")
  105.   Set objStream = Server.CreateObject("ADODB.Stream")
  106.   objStream.Type = 1 ' adTypeBinary
  107.   objStream.Open
  108.   objStream.LoadFromFile strFileName
  109.   objStream.SaveToFile Server."123_onweb.gif",2
  110.   使用方法:
  111.   把上面的代码写成upload.asp
  112.   在浏览器里面输入:
  113.   http://XXX/upload.asp?file1=c:\上传文件\123.gif
  114.   XXX为你的主机地址
  115.   执行完后你会看到你的目录下面多了一个123_onweb.gif
  116.   他就是你要文件拉!!!!
  117.   根据原理我们可以扩展以下代码:
  118.   upload.asp文件
  119.   <%
  120.   Function GetFileName(ByVal strFile)
  121.   If strFile <> "" Then
  122.   GetFileName = mid(strFile,InStrRev(strFile, "\")+1)
  123.   Else
  124.   GetFileName = ""
  125.   End If
  126.   End function
  127.   strFileName = Request.Form("file1")
  128.   Set objStream = Server.CreateObject("ADODB.Stream")
  129.   objStream.Type = 1 ' adTypeBinary
  130.   objStream.Open
  131.   objStream.LoadFromFile strFileName
  132.   objStream.SaveToFile Server.MapPath(GetFileName(strFileName)),2
  133.   objStream.Close
  134.   %>
  135.   upload.htm文件
  136.   <form name="FORM" action="upload.asp" method="post">
  137.   <input type="submit" name="submit" value="OK">
  138.   <input type="file" name="file1" style="width:400" value="">
  139.   </form>
  140.   读文件不想用FSO,有的空间不支持。
  141.   有一个LoadFromFile的方法。可以读取文件。
  142.   下面是我的代码。
  143.   function readfile(URL,chartype)
  144.   set srmObj = server.CreateObject("adodb.stream")
  145.   srmObj.type=1
  146.   srmObj.mode=3
  147.   srmObj.open
  148.   srmObj.Position=0
  149.   srmObj.LoadFromFile URL
  150.   srmObj.Position = 0
  151.   srmObj.type=2
  152.   srmObj.charset=chartype
  153.   readfile=srmObj.readtext()
  154.   end function
  155.   两个参数。URL是文件的路径,好像只能绝对路径。chartype是文件以什么编码存放的。
  156.   返回一个字符串,存放文件的内容。
  157.   这个函数只能读文本文件。读二进制文件也差不多。要用的人可以自己改
  158.   < = src="/article/js/c9.js"> 基于adodb.stream的文件操作类
  159.   <%
  160.   ’*************************************************************
  161.   ’转发时请保留此声明信息,这段声明不并会影响你的速度!
  162.   ’*************************************************************
  163.   ’*************************************************************
  164.   ’@author: 面条
  165.   ’@realname: 徐仁禄
  166.   ’@email: xurenlu@sohu.com
  167.   ’@QQ: 55547082
  168.   ’@Homepage: http://www.ksdn.net
  169.   ’@版权申明:
  170.   ’ 非盈利性质团体或者个人可以免费使用.
  171.   ’*************************************************************
  172.   ’*************************************************************
  173.   ’ 类名称: files
  174.   ’ 类功能: 实现文件读写功能,利用adodb.stream实现,在不支持fso的主机上也可以读写文件.
  175.   ’*************************************************************
  176.   class files
  177.   private adSaveCreateOverWrite ’创建文件的时候可以覆盖已经存在的文件.
  178.   private adSaveCreateNotExist ’保存文件的时候如果文件不存在,可以创建文件.
  179.   ’*************************************************************
  180.   ’ 事件名称: Class_Initialize()
  181.   ’ 事件发生条件: 类创建时候产生该事件
  182.   ’ 事件内容: 给私有变量赋值
  183.   ’ 事件传入参数: 无
  184.   ’*************************************************************
  185.   sub Class_Initialize()
  186.   adSaveCreateOverWrite =2
  187.   adSaveCreateNotExist = 1
  188.   end sub
  189.   ’*************************************************************
  190.   ’ 函数名称: function readfile(filepath)
  191.   ’ 函数内容: 读出文件
  192.   ’ 传入参数: filepath:要读的文件的绝对路径
  193.   ’ 返回参数: 要读的文件的内容.
  194.   ’*************************************************************
  195.   function readfile(filepath)
  196.   on error resume next
  197.   dim stm2
  198.   set stm2 =server.createobject("ADODB.Stream")
  199.   stm2.Charset = "gb2312"
  200.   stm2.Open
  201.   stm2.LoadFromFile filepath
  202.   readfile = stm2.ReadText
  203.   end function
  204.   ’*************************************************************
  205.   ’ 函数名称: function writefile(filepath,str)
  206.   ’ 函数内容: 写入文件
  207.   ’ 传入参数: filepath:要读的文件的绝对路径
  208.   ’ str: 要写入的内容
  209.   ’ 返回参数: 无返回
  210.   ’*************************************************************
  211.   function writefile(filepath,str)
  212.   on error resume next
  213.   Set stm = server.createobject("ADODB.Stream")
  214.   stm.Charset = "gb2312"
  215.   stm.Open
  216.   stm.WriteText str
  217.   stm.SaveToFile filepath, adSaveCreateOverWrite
  218.   end function
  219.   ’*************************************************************
  220.   ’ 函数名称: function copy(filepath_s,filepath_d)
  221.   ’ 函数内容: 读出文件
  222.   ’ 传入参数: filepath_d:目的文件的绝对路径
  223.   ’ filepath_s:源文件路径
  224.   ’*************************************************************
  225.   function copy(filepath_s,filepath_d)
  226.   on error resume next
  227.   dim stm2
  228.   set stm2 =server.createobject("ADODB.Stream")
  229.   stm2.Charset = "gb2312"
  230.   stm2.Open
  231.   stm2.LoadFromFile filepath_s
  232.   stm2.SaveToFile filepath_d, adSaveCreateOverWrite
  233.   end function
  234.   end class
  235.   利用Adodb.Stream直接下载文件
  236.   在浏览器的地址栏里直接输入一个doc或xls或jpg的文件的url路径,那么该文件会直接显示在浏览器里。而在很多时候我们希望能直接弹出下载提示框让用户下载,我们该怎么办呢?这里有两种方法:
  237.   1、设置你的服务器的iis,给doc等后缀名做映射
  238.   2、在向客户端发送时设置其contenttype
  239.   下面详细说明方法2
  240.   程序代码:
  241.   _code style="DISPLAY: none" name="html_code"><%
  242.   Response.Buffer = true
  243.   Response.Clear
  244.   dim url
  245.   Dim fso,fl,flsize
  246.   dim Dname
  247.   Dim objStream,ContentType,flName,isre,url1
  248.   '*********************************************调用时传入的下载文件名
  249.   Dname=trim(request("n"))
  250.   '******************************************************************
  251.   If Dname<>"" Then
  252.   '******************************下载文件存放的服务端目录
  253.   url=server.MapPath("/")&"\"&Dname
  254.   '***************************************************
  255.   End If
  256.   Set fso=Server.CreateObject("Scripting.FileSystemObject")
  257.   Set fl=fso.getfile(url)
  258.   flsize=fl.size
  259.   flName=fl.name
  260.   Set fl=Nothing
  261.   Set fso=Nothing
  262.   %>
  263.   <%
  264.   Set objStream = Server.CreateObject("ADODB.Stream")
  265.   objStream.Open
  266.   objStream.Type = 1
  267.   objStream.LoadFromFile url
  268.   Select Case lcase(Right(flName, 4))
  269.   Case ".asf"
  270.   ContentType = "video/x-ms-asf"
  271.   Case ".avi"
  272.   ContentType = "video/avi"
  273.   Case ".doc"
  274.   ContentType = "application/msword"
  275.   Case ".zip"
  276.   ContentType = "application/zip"
  277.   Case ".xls"
  278.   ContentType = "application/vnd.ms-excel"
  279.   Case ".gif"
  280.   ContentType = "image/gif"
  281.   Case ".jpg", "jpeg"
  282.   ContentType = "image/jpeg"
  283.   Case ".wav"
  284.   ContentType = "audio/wav"
  285.   Case ".mp3"
  286.   ContentType = "audio/mpeg3"
  287.   Case ".mpg", "mpeg"
  288.   ContentType = "video/mpeg"
  289.   Case ".rtf"
  290.   ContentType = "application/rtf"
  291.   Case ".htm", "html"
  292.   ContentType = "text/html"
  293.   Case ".txt"
  294.   ContentType = "text/plain"
  295.   Case Else
  296.   ContentType = "application/octet-stream"
  297.   End Select
  298.   Response.AddHeader "Content-Disposition", "attachment; filename=" & flName
  299.   Response.AddHeader "Content-Length", flsize
  300.   Response.Charset = "UTF-8"
  301.   Response.ContentType = ContentType
  302.   Response.BinaryWrite objStream.Read
  303.   Response.Flush
  304.   response.Clear()
  305.   objStream.Close
  306.   Set objStream = Nothing
  307.   %>
  308.   _lightcode style="BORDER-RIGHT: #999999 1px dotted; PADDING-RIGHT: 5px; BORDER-TOP: #999999
  309.   1px dotted; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 5px; BORDER-LEFT: #999999
  310.   1px dotted; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dotted; FONT-FAMILY: sans-serif;
  311.   HEIGHT: 40px; BACKGROUND-COLOR: #f9f9f9" name="html_lightcode"><%
  312.   Response.Buffer = true
  313.   Response.Clear
  314.   dim url
  315.   Dim fso,fl,flsize
  316.   dim Dname
  317.   Dim objStream,ContentType,flName,isre,url1
  318.   '*********************************************调用时传入的下载文件名
  319.   Dname=trim(request("n"))
  320.   '******************************************************************
  321.   If Dname<>"" Then
  322.   '******************************下载文件存放的服务端目录
  323.   url=server.MapPath("/")&"\"&Dname
  324.   '***************************************************
  325.   End If
  326.   Set fso=Server.CreateObject("Scripting.FileSystemObject")
  327.   Set fl=fso.getfile(url)
  328.   flsize=fl.size
  329.   flName=fl.name
  330.   Set fl=Nothing
  331.   Set fso=Nothing
  332.   %>
  333.   <%
  334.   Set objStream = Server.CreateObject("ADODB.Stream")
  335.   objStream.Open
  336.   objStream.Type = 1
  337.   objStream.LoadFromFile url
  338.   Select Case lcase(Right(flName, 4))
  339.   Case ".asf"
  340.   ContentType = "video/x-ms-asf"
  341.   Case ".avi"
  342.   ContentType = "video/avi"
  343.   Case ".doc"
  344.   ContentType = "application/msword"
  345.   Case ".zip"
  346.   ContentType = "application/zip"
  347.   Case ".xls"
  348.   ContentType = "application/vnd.ms-excel"
  349.   Case ".gif"
  350.   ContentType = "image/gif"
  351.   Case ".jpg", "jpeg"
  352.   ContentType = "image/jpeg"
  353.   Case ".wav"
  354.   ContentType = "audio/wav"
  355.   Case ".mp3"
  356.   ContentType = "audio/mpeg3"
  357.   Case ".mpg", "mpeg"
  358.   ContentType = "video/mpeg"
  359.   Case ".rtf"
  360.   ContentType = "application/rtf"
  361.   Case ".htm", "html"
  362.   ContentType = "text/html"
  363.   Case ".txt"
  364.   ContentType = "text/plain"
  365.   Case Else
  366.   ContentType = "application/octet-stream"
  367.   End Select
  368.   Response.AddHeader "Content-Disposition", "attachment; filename=" & flName
  369.   Response.AddHeader "Content-Length", flsize
  370.   Response.Charset = "UTF-8"
  371.   Response.ContentType = ContentType
  372.   Response.BinaryWrite objStream.Read
  373.   Response.Flush
  374.   response.Clear()
  375.   objStream.Close
  376.   Set objStream = Nothing
  377.   %>
复制代码

TOP

  1. ◎使用脚本部件向导简化WSC设计
  2. 尽管XML语言被设计成为一种相对精简的标记语言,符合XML格式的WSC部件也设计的极为规范,但就我而言,在具体的设计过程中,出错最多的仍然在XML的各种标记上,幸好,微软推出了专门生成WSC部件代码的工具Windows Script Component Wizard,这个工具可以迅速的为我们搭建好WSC部件的框架,极大的方便了我们对WSC部件的编写,此向导除了在微软的网站上下载外,在我的网盘上也有一份拷贝。
  3. 它的使用方法也极为简单,就连诸如我之流E文程度极差者也能使用。
  4. 如上例,生成如下代码:
  5. <?xml version="1.0"?>
  6. <component>
  7. <?component error="true" debug="false"?>
  8. <registration
  9.        description="测试用的WSC部件"
  10.        progid="test.WSC"
  11.        version="1.00"
  12.        classid="{155642f0-fbad-4f98-90cb-b38b7a3cf428}"
  13. >
  14. </registration>
  15. <public>
  16.        <property name="start">
  17.               <get/>
  18.        </property>
  19.        <property name="end">
  20.               <get/>
  21.               <put/>
  22.        </property>
  23.        <method name="print">
  24.               <PARAMETER name="para1"/>
  25.               <PARAMETER name="para2"/>
  26.        </method>
  27.        <method name="list">
  28.               <PARAMETER name="para3"/>
  29.        </method>
  30. </public>
  31. <implements type="Behavior" id="Behavior"/>
  32. <script language="VBScript">
  33. <![CDATA[
  34. dim start
  35. dim end
  36. function get_start()
  37.        get_start = start
  38. end function
  39. function get_end()
  40.        get_end = end
  41. end function
  42. function put_end(newValue)
  43.        end = newValue
  44. end function
  45. function print(para1,para2)
  46.        print = "Temporary Value"
  47. end function
  48. function list(para3)
  49.        list = "Temporary Value"
  50. end function
  51. ]]>
  52. </script>
  53. </component>
  54. 呵呵,该有的东西全有了,属性对应的变量也定以来,我们只要对其中实现部分稍加修改就可以注册应用了,需要注意的是,如果在WSC编码设计中出现汉字,则必须在第一行添加encoding="gb2312"标记,既第一行为:
  55. <?xml version="1.0" encoding="gb2312" ?>
  56. 才能正常通过注册。
复制代码

TOP

  1. ◎简单WSC组件的基本结构
  2. WSC是微软公司提供的使用脚本语言来创建 COM 部件的便利途径,它可以应用于支持 COM 部件的应用程序。WSC采用XML语言编写。一个标准的WSC组件本身涉及到XML标记相当复杂,但幸好它的结构非常规范,了解结构,填入代码,一个WSC脚本部件就可以工作了。
  3. 就我个人而言,把WSC部件分成三个部分:注册部分,定义属性、方法、事件部分和实现部分。
  4. 1、注册部分:
  5. 主要包含了向注册表注册部件时需要填写的信息。一般包含了部件描述、版本信息、progid、clsid等四个内容。基本格式如下:
  6. <registration
  7. description="部件描述的信息"
  8. version="部件的版本号"
  9. progid="XXXX.XXX"        /程序ID
  10. clsid="xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx"/>
  11. 需要说明的是:
  12. ①registration是XML标记。
  13. ②progid是VBS通过CreateObject函数通过绑定组件创建实例时的标志,一个组件如果没有ProgId,几乎是无法使用的。例如:
  14. Set obj=CreateObject("scripting.filesystemobject")
  15. 代码中的scripting.filesystemobjec就是ProgId。
  16. ③Clsid是部件在注册表项中的唯一标志,系统注册时把有关部件的信息放在注册表中,应用时通过读取注册信息,应用程序可以找到并载入该部件。可以使用Uuidgen.exe 的程序随机生成。当然如果你不指定Clsid,系统注册时regsvr32会为它自动创建一个,但正常情况下应该指定一个。由于我的计算机上没有安装VC,所以Uuidgen.exe和GUIDGen.exe文件,Clsid从一直是我极为头疼的问题,幸好UMU给出了一个脚本产生,现把代码抄录如下:
  17. Dim objSLTL
  18. Set objSLTL = CreateObject( "Scriptlet.TypeLib" )
  19. Wscript.echo objSLTL.GUID
  20. Set objSLTL = Nothing
  21. 2、定义属性、方法、事件部分
  22. 在这个部分定义了用户在脚本中可以使用的属性、方法、事件,其基本结构如下:
  23. <Public>
  24. <property name="属性一" >
  25. <get/>
  26.        <Put/>
  27. </property>
  28. <method name="方法一">
  29.        <parameter name="参数一"/>
  30. </method>
  31. <event name="事件一">
  32.        <parameter name="参数一"/>
  33. </event>
  34. </Public>
  35. 其中Public是XML的标记,property、method、event标记分别定义了部件属性、方法、事件。Name标记定义了其名称,Parameter标记定义了其参数。作为property标记来说,本身带有两个子标记,它们分别是<get/><put/>,它们两个分别定义了读写属性的方式。当需要读写属性的时候,就会自动执行它们中的一个。在实现部分中,它们会以Put_属性名 或者 Get_属性名的形式出现。如果忽略了<get/>标记,则此属性是只可写的,忽略了<Put/>标记,说明此属性是只读的。作为vbs脚本,在脚本中响应事件的机会是比较少的,对此也就不再详细的说明。
  36. 3、实现部分
  37. 在上一部分定义的所有的属性、方法、事件的实现函数都必须包含在<Script>标记中。结构如下:
  38. <script language="VBScript">
  39. <![CDATA[
  40. 定义公用变量
  41. 进行初始化
  42. Function 函数名称()
  43. 函数实现
  44. End funciton
  45. ]]>
  46. </script>
  47. 抛开XML的标记不管,我们只需要有关的部分进行修改就可以了。在Public部分定义的属性和方法,在本部分必须定义相应的变量和函数。
  48. 当然,WSC作为一个XML格式的文件,一些基本的标记还是需要知道的,下面有关标记说明摘自微软。
  49. <component>和<package>元素:<component> 元素包含的是一个完整的脚本部件定义。在同一个 .wsc 文件中可以出现多个 <component> 元素,但这些元素应包含在一个 <package> 元素内。
  50. <registration>元素:包括用来将脚本部件注册为 COM 部件的信息。
  51. <public>元素:包含脚本部件所说明的属性、方法和事件的定义。这些定义指向定义在独立的 <script> 块中的变量或函数。
  52. <implements>元素:给脚本部件指定COM接口处理程序,这将确定该脚本部件属于哪种COM部件类型。例如,通过指定 <implements type=ASP>,就可以实现 ASP 接口处理程序,并因此在脚本部件中可以访问ASP对象模型。
  53. <public>元素:指定了脚本部件将实现 COM Automation 接口处理程序。因此,对 Automation 处理程序无需创建<implements>元素。
  54. <script>元素:包含用来实现脚本部件逻辑的脚本,这取决于所创建的COM部件类型。例如,如果要创建的是 COM Automation 部件,则可以在
  55. <public> 元素中声明属性、方法和事件,然后用一个或多个 <script> 元素编写脚本来定义这些内容。
  56. <object>元素:包含脚本中所使用的某个对象的信息,如另一个 COM 部件的信息。
  57. <resource>元素:包含不应被硬编码到脚本部件代码中的值。资源元素可能包括在各个版本间可能更改的信息,可能需要翻译的字符串以及其他值。
  58. <reference>元素:引用在脚本中需要使用的类型库。
  59. <comment>元素:包含在分析和执行该脚本部件时将被忽略的文字,说明或者注释。
  60. 了解了这些知识,让我们来看一个最最简单的例子:
  61. <?XML version="1.0"?>
  62.        <package>
  63.          <component id="test">
  64.            <registration
  65.              progid="ID"
  66.              description="description"
  67.              version="1"
  68.              clsid="{A66E243C-CF13-42AC-BE67-558F2FA82B39}"/>
  69.            <public>
  70.              <property name="du"/>
  71.                <get/>
  72.              <method name="xie"/>
  73.            </public>
  74.            <script language="VBScript">
  75.              <![CDATA[
  76.                dim du
  77.                function get_du()
  78.           du=get_du
  79.                End function
  80.                Function xie()
  81.                  msgbox du
  82.                End Function
  83.              ]]>
  84.            </script>
  85.          </component>
  86.        </package>
  87. 用代码调用
  88. Set test=CreateObject("ID")
  89. test.du=5
  90. test.xie
  91. 显示正常
复制代码

TOP

  1. ◎WMI轻松入门之四——解析类定义
  2.   在上一篇文章中我们说过,WMI中用类对托管资源进行抽象定义和和管理,那么,什么是类?
  3.   类的定义相信在很多面向对象的计算机教材中都能找到,我的理解是:类,是包含了一组独立功能的模块,这个模块由数据和功能组成,其中数据叫做类的属性,完成功能的部分叫做类的方法。我认为类的优点是:类完全可以由张三进行设计,李四可以拿来直接使用,在使用的时候,李四不需要知道类是如何设计、如何实现的,只要知道:这个类可以实现什么样的功能,这个类包含有什么样的方法和属性就可以了。更加重要的是,类还可以进行继承,就像父亲亡故,儿子继承了父亲所有的财产一样,如果我们发现某个类A已经完成了我们需要的大部分功能,我们再去重新设计一个新类来完成我们所有的功能,未免费时费力,根据类可以继承的特性,我们只要声明一个类继承了类A,然后按照需要添加需要的新的数据元素、扩展现有的功能模块,相信工作会简单很多。我看到很多书里都在说代码重用,我不是程序员,不知道所谓的代码重用具体是如何实现的,但是相信类应该在其中起了很重要的作用。
  4.   在微软的教程中,对类从功能和继承关系上进行了详细的说明,我不再赘述,仅仅做一个摘要:
  5.   任何资源如果要求WMI进行托管,至少需要两个文件:提供程序和托管对象格式 (MOF) 文件。提供程序是一个中间件,通过调用托管资源的本地 API 来响应 WMI 请求。
  6.   每一个WMI托管的硬件和软件资源均有一个类来定义,反过来说,一个CIM类就是一个WMI托管资源的模板,而且资源的所有实例都使用这个模板。这些模板是由属性、方法和限定符组成的。这些属性、方法和限定符都定义在MOF文件中。方法和属性是我们经常遇到的,那么什么是限定符呢?限定符是关于类、属性或方法类型的附加修饰符,类是静态的、抽象的、还是关联的,属性是只读的还是可写的,方法的返回参数等,都定义在其中,那么我们如何知道某个类有那些限定符呢?如下代码可以帮助我们方便的获得类的属性、方法和限定符的信息。
  7. Code:
  8. strComputer = "."
  9. strNameSpace = "root\cimv2"
  10. strClass=inputbox("请输入你要查询的类")
  11. Set objClass = GetObject("winmgmts:\\" & strComputer & _
  12.                            "\" & strNameSpace & ":" & strClass)
  13. WScript.Echo strClass & " 的类限定信息如下:"
  14. WScript.Echo "------------------------------"
  15. i = 1
  16. For Each objClassQualifier In objClass.Qualifiers_
  17.       If VarType(objClassQualifier.Value) = (vbVariant + vbArray) Then    '常数 VBVariant 只与 VBArray 一起返回,以表明 VarType 函数的参数是一个 Variant 类型的数组。
  18.           strQualifier = i & ". " & objClassQualifier.Name & " = " & _
  19.                                     Join(objClassQualifier.Value, ",")
  20.       Else
  21.           strQualifier = i & ". " & objClassQualifier.Name & " = " & _
  22.                                     objClassQualifier.Value
  23.       End If
  24.       WScript.Echo strQualifier
  25.       strQualifier = ""
  26.       i = i + 1
  27. Next
  28. WScript.Echo
  29. WScript.Echo strClass & " 类的属性和属性限定信息"
  30. WScript.Echo "-------------------------------------------------"
  31. i = 1 : j = 1
  32. For Each objClassProperty In objClass.Properties_
  33.       WScript.Echo i & ". " & objClassProperty.Name
  34.       For Each objPropertyQualifier In objClassProperty.Qualifiers_
  35.           If VarType(objPropertyQualifier.Value) = (vbVariant + vbArray) Then
  36.               strQualifier = i & "." & j & ". " & _
  37.                              objPropertyQualifier.Name & " = " & _
  38.                              Join(objPropertyQualifier.Value, ",")
  39.           Else
  40.               strQualifier = i & "." & j & ". " & _
  41.                              objPropertyQualifier.Name & " = " & _
  42.                              objPropertyQualifier.Value
  43.           End If
  44.           WScript.Echo strQualifier
  45.           strQualifier = ""
  46.           j = j + 1
  47.       Next
  48.       WScript.Echo
  49.       i = i + 1 : j = 1
  50. Next
  51. WScript.Echo
  52. WScript.Echo strClass & " 类的方法和方法限定信息"
  53. WScript.Echo "-------------------------------------------------"
  54. i = 1 : j = 1
  55. For Each objClassMethod In objClass.Methods_
  56.       WScript.Echo i & ". " & objClassMethod.Name
  57.       For Each objMethodQualifier In objClassMethod.Qualifiers_
  58.           If VarType(objMethodQualifier.Value) = (vbVariant + vbArray) Then
  59.               strQualifier = i & "." & j & ". " & _
  60.                              objMethodQualifier.Name & " = " & _
  61.                              Join(objMethodQualifier.Value, ",")
  62.           Else
  63.               strQualifier = i & "." & j & ". " & _
  64.                              objMethodQualifier.Name & " = " & _
  65.                              objMethodQualifier.Value
  66.           End If
  67.           WScript.Echo strQualifier
  68.           strQualifier = ""
  69.           j = j + 1
  70.       Next
  71.       WScript.Echo
  72.       i = i + 1 : j = 1
  73. Next
  74. 如果我们执行上述代码来查找win32_service类的限定符,一般情况下可以得到如下信息:
  75. win32_service 的类限定信息如下:
  76. ------------------------------
  77. 1. dynamic = True
  78. 2. Locale = 1033
  79. 3. provider = CIMWin32
  80. 4. SupportsUpdate = True
  81. 5. UUID = {8502C4D9-5FBB-11D2-AAC1-006008C78BC7}
  82. win32_service 类的属性和属性限定信息
  83. ------------------------------------------------------
  84. 1. AcceptPause
  85. 1.1. CIMTYPE = boolean
  86. 1.3. read = True
  87. ……
  88. win32_service 类的方法和方法限定信息
  89. -------------------------------------------------
  90. 1. StartService
  91. 1.1. MappingStrings = Win32API|Service Functions|StartService
  92. 1.2. Override = StartService
  93. 1.3. ValueMap = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,..
  94. ……
  95.   返回的信息很多,我省略了其中的绝大部分,只保留了一部分典型的来说明我们应该如何读懂类的限定信息。
  96.   返回信息的第一部分表明了对于此类的限定信息:
  97.   1. dynamic = True    Abstract——抽象类,Dynamic——动态类,Association——关联类,表明win32_service类是动态类。
  98.   2. Locale = 1033      代表着区域设置或者叫本地化编码,是一组与用户的语言、国家/地区以及文化传统有关的用户首选信息,确定诸如:键盘布局、字母的排序顺序,以及日期、时间、数字、货币等的格式,一般不用管它。
  99.   3. provider = CIMWin32    Provider代表的是类的提供程序,说明win32_service类是由CimWin32.dll提供的。
  100.   4. SupportsUpdate = True    指出类是否支持实例的修改。
  101.   5. UUID = {8502C4D9-5FBB-11D2-AAC1-006008C78BC7}    代表本地计算机上的全球通用唯一的标识符,我不知道有什么用处。
  102.   
  103.   返回信息的第二部分代表了类的属性限定符
  104.   1. AcceptPause
  105.   这第一行表明检索到的类的属性名是:AcceptPause
  106.   1.1. CIMTYPE = boolean    CIMType代表属性的数据类型,说明这个属性是布尔型。
  107.   1.3. read = True     read代表属性可读,而Write则代表属性的值是否可以修改,如果属性没有定义Write限定符,代表什么意思呢?它代表从该类获得的实例的那个属性是不可以改写的,也就是说不能给这个属性赋值。这其实解决了一个困惑我很久的一个问题,为什么我在对很多类的属性进行了赋值后,用Put_方法对修改进行了提交,可是事实上却什么也没有改变。此外还有Key限定符指出该属性是类的键,用于识别在相同资源集合中的托管资源的唯一实例。
  108.   
  109.   返回信息的第三部分代表了类的方法及方法的限定符。现在我们能用到的还不多,就不介绍了,有兴趣的朋友可以参照:http://msdn2.microsoft.com/en-us/library/aa393650.aspx
  110.   需要说明的是,不是在每一个类定义或者属性、方法定义中,这所有的限定符都要出现的,可能只出现了其中的一部分。
  111.   当然,我们也可以从system32\wbem\cimwin32.mof以及system32/wbem/cimwin32.mfl两个文件中读取整个托管资源的类定义和类描述,以及对每个类的属性、方法和限定符的描述,其中包含的信息很多,也包含了更多的类限定符,阅读起来有一定的难度。将上面的例子的代码和vbsedit中包含的Object Browser联合起来,可以得到我们需要的绝大部分的信息。
复制代码

TOP

  1. ◎WMI轻松入门之三——获得类的实例
  2. 2.获得类的实例
  3. 我们有4种方法获得类的实例,其中方法1和方法2是通过SwbemServices对象的InstancesOf方法和ExecQuery方法来获得某个类的多个实例组成的集合对象。方法3和方法4则是返回单独的类的实例,即返回的是一个SWbemObject对象。
  4. 1)InstancesOf方法获得类的实例集合
  5. InstancesOf方法的语法参数格式如下:
  6. SwbemServices.InstancesOf(strClass)
  7. strClass为类名,例如"Win32_Service"
  8. 回顾例二,就是用语句:Set objSWbemObjectSet = objSWbemServices.InstancesOf("Win32_Processor ") 来获得"Win32 Processor "类的所有实例集合,然后我们可以用
  9. For Each objSWbemObject In objSWbemObjectSet
  10. ……
  11. Next
  12. 语句获得每一个类的实例SWbemObject对象,然后就可以根据我们的需要,进行相应的操作。
  13. 2)ExecQuery方法获得类的实例集合
  14. 与InstancesOf方法不一样的是,ExecQuery方法可以通过查询语句,只返回匹配部分实例和属性。ExecQuery方法的语法参数格式如下:
  15. SwbemServices.ExecQuery(strQuery)
  16. strQuery为WMI查询语言(WQL)构造的一个查询语句字符串。
  17. 例如:
  18. Set objSWbemObjectSet = objSWbemServices.ExecQuery("select ProcessorId from Win32_Processor where DeviceID='cpu0'")
  19. 3)Get方法获得一个类的实例(SWbemObject对象)
  20. 此方法也就不必再用 For Each objSWbemObject In objSWbemObjectSet :……:Next 语句从SWbemObjectSet对象中获得每一个类的实例SWbemObject对象,Get方法的语法参数格式如下:
  21. SwbemServices.Get([strObjectPath][.KeyProperty='Value'])
  22. strObjectPath是类的名字
  23. KeyProperty是主键属性名
  24. Value是指定的主键属性值
  25. 这里要注意的是如果要获得一个类的实例,则strObjectPath.KeyProperty='Value'中的任何一项都不能省略,例如:
  26. Set objSWbemServices = GetObject("winmgmts:")
  27. Set objSWbemObject = objSWbemServices.Get("Win32_Processor.DeviceID='cpu0'")
  28. Wscript.echo “CPU的型号为”:" & objSWbemObject.ProcessorId
  29. 看,结果一样,脚本却简化了不少。
  30. 4)直接用moniker名字法获得一个类的实例
  31. 在说明Moniker名字法的时候我们说过,当包括最后2项时,返回的是一个类的单独实例,如:
  32. Set objSWbemObject = GetObject("winmgmts:Win32_Processor.DeviceID='cpu0'")
  33. Wscript.echo "首枚CPU序列号:" & objSWbemObject.ProcessorId
  34. 是不是更加简单?仅仅2条语句就获得了CPU的序列号。
  35. 3.读取类的实例属性,调用类的方法
  36. 实在是太多了,你可以参照C:/WINDOWS/system32/wbem/cimwin32.mfl文件中,对所有类的属性和方法的描述。也可以用下列代码查询,虽然看起来有点困难,不过看的多了也就明白了。
  37. strClass=inputbox("请输入你要查询的类")
  38. strComputer = "."
  39. strNameSpace = "root\cimv2"
  40. Const wbemFlagUseAmendedQualifiers = &h20000
  41. Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace)
  42. Set objClass = objWMIService.Get(strClass, wbemFlagUseAmendedQualifiers)
  43. strMOF = objClass.GetObjectText_
  44. WScript.Echo strMOF
复制代码

TOP

  1. ◎WMI轻松入门之二——连接到指定的CIM命名空间
  2. 四、常用的脚本对象库
  3. WMI脚本对象库由24个对象组成,在脚本中心有一副脚本库对象模型的图,有兴趣的朋友可以参考一下,作为入门,我们一般只用到其中的四个对象,其继承和层级关系如下:
  4. SwbemLocator教本库对象→SwbemServicesWMI服务对象→SwbemObjectSet类实例集合对象→SwbemObject类的实例
  5. 好了,现在让我们来举个例子,详细说明一下这四个对象在脚本中的应用方法:
  6. 例一:用来检索计算机上安装的光驱:
  7. strComputer = "."
  8. Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
  9. Set objSWbemServices = objSWbemLocator.ConnectServer
  10. Set colItems = objSWbemServices.ExecQuery("Select * from Win32_CDROMDrive")
  11. For Each objItem in colItems
  12.    WScript.Echo "光盘驱动器的类型: " & objItem.Caption
  13.    WScript.Echo "盘符是: " & objItem.Id
  14. Next
  15. 例二:用来检索CPU型号
  16. strComputer = "."
  17. Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
  18. Set objSWbemServices = objSWbemLocator.ConnectServer
  19. Set objSWbemObjectSet = objSWbemServices.InstancesOf("Win32_Processor")
  20. For Each objSWbemObject In objSWbemObjectSet
  21.    Wscript.echo  "CPU的型号为:" & objSWbemObject.name
  22. Next
  23. 请注意,这两个脚本虽然简单,却代表了WMI脚本设计中最普遍的东西,可以说是很典型的脚本。让我们来仔细观察一下这两个脚本,讨论讨论一下脚本访问WMI的基本方法:我们可以看到整个脚本的执行过程基本相同:
  24. ①定义了SwbemLocator的实例;SwbemServices、SwbemObjectSet、SwbemObject对象;创建了SwbemLocator的实例;②通过SwbemLocator的ConnectServer方法连接到WMI,获得SwbemServices的实例集合;③枚举集合中的每个实例;④显示各实例的一些属性。
  25. 让我们来详细说明一下各行代码的详细含义,并请仔细回想我们第二部分WMI基本结构中谈到的编写WMI脚本的基本步骤:(注意:考虑到脚本的简易,我们编写的脚本一般只在本地计算机进行检索,我们只介绍涉及本地的这一部分,涉及到访问远程计算机的部分我们就省略了,其实随着计算机安全技术的发展,仅凭WMI访问远程计算机的可行性是越来越小了)
  26. 1、连接到指定的CIM命名空间
  27. 要用WMI对象编程,必须首先创建WMI对象脚本库的实例,连接到目标计算机的CIM命名空间。
  28. 方法一:
  29. 步骤一、建立SwbemLocator对象的实例。代码为:
  30. Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
  31. 然后用SwbemLocator对象的ConnectServer方法(SwbemLocator对象只有1个只读属性Security_和1个方法ConnectServer)建立WMI服务的连接,返回一个命名空间的连接(SwbemServices对象),代码为:
  32. Set objSWbemServices = objSWbemLocator.ConnectServer()
  33. ConnectServer方法共有8个参数,所有参数都是可选的,其参数格式如下:
  34. ConnectServer([strComputName],[strNamespace],[strUser],[strPassword],[strLocale],[strAuthority],[iSecurityFlags],[objwbemNamedValueSet])
  35. 考虑到WMI的复杂性,在使用中我们如果只是在本地计算机上进行检索和查询,那么我们只需要设置第1、2个参数,其它参数都可以省略;如果想连接到远程计算机,一般需要对前4个参数进行设置,我们也只对此做个简单的介绍。
  36. strServer——计算机名,缺省为本机,本机也可以用”.”
  37. strNamespace——需要登录的CIM命名空间,例如:"root\CIMV2",缺省为"root\CIMV2"。
  38. 方法二:用moniker名字法建立WMI服务的连接,这也是微软推荐的连接方法
  39. moniker名字法是利用GetObject函数直接建立WMI服务的连接,它的要点就是通过编写一个moniker字符串作为GetObject函数的参数,然后返回一个SwbemServices对象。
  40. 关于moniker字符串的完整格式如下:
  41. "winmgmts:[{SecuritySettings}!][\\ComputerName][\Namespace][:ClassName][.KeyProperty='Value']"
  42. "winmgmts:"是前缀, 表示为WMI服务,必须使用;第二部分用来验证权限和假冒级别的,省略。第三部分为计算机名字:"\\.\"是计算机名字,默认可省略,其余同上;第四部分CIM命名空间:缺省的命名空间为"root\CIMV2",默认可省略。
  43. 第五部分为类名。第六部分为属性值。注意:当该moniker字符串不包括最后2项时(即为:"winmgmts:[\\ComputerName][\Namespace]"),则GetObject(moniker字符串)返回的是一个命名空间的已验证的连接(SwbemServices对象);当不包括最后1项时,返回的是一个CIM类(SWbemObject对象);当包括最后2项时,返回的是一个类的单独实例(SWbemObject对象)。
复制代码

TOP

  1. ◎WMI轻松入门之一——基本概念
  2. 其实我给文章起这样的名字,绝对没有轻视WMI的意思,事实上就连微软也有“WMI非常难于学习而且更难于使用”的说法,在近日的学习过程中更感觉到了WMI检索功能的强大,之所以起个“轻松入门”的名字,我只是有感于外国人写教程在思路上和国人不太一致,西方式的幽默看起来困难无比,再加上一上手就在类的基本结构上展开讨论,吓跑了无数Vbs的爱好者,想从国人常见的角度出发来说说怎么学习WMI而已。百度空间的长度限制太讨厌了,一次发不完,只好分割成三部分,题目只能大致起了,见谅。
  3. 一、什么是WMI?微软有很多说法,大家可以到脚本中心查阅,我这样理解,WMI是一个用于管理Windows系统资源的对象,其内部应是一个树状的数据库,数据库中包含了很多个分支,每个分支被称作命名空间,每个命名空间包含了很多个对托管资源的抽象定义,这种定义叫做类。在很多计算机教材中喜欢把类比作建筑蓝图,依据蓝图建造的楼宇叫做类的实例,我更喜欢将类和其实例的关系比作表格,类就是表格的字段定义,而表中的数据就是一个个的类的实例,也许我这样说会让很多朋友更加糊涂,但是依此类推,WMI中最终存在的是各种软硬件资源的抽象定义,我们利用WMI,就是要按图索骥,通过类定义,获得类实例,检索出符合要求的属性,调用其内置的方法,实现我们的目标。相信很多朋友已经发现,我将WMI等同于CIM库了,我清楚他们不是一回事,但我相信这样更容易理解。如图:
  4. 二、WMI的基本结构
  5. 严格说来,WMI由四部分组成:
  6. 1、         公共信息模型对象管理器——CIMOM
  7. 2、         公共信息模型——CIM
  8. 3、         WMI提供程序
  9. 4、         WMI脚本对象库
  10. 其中其第1、2、3三个部分,在使用中很少加以区别,我们一般统称为CIM库。
  11. 所以我们可以认为WMI实际是由两部分组成:CIM库和WMI脚本对象库。在具体使用过程中,我们是通过WMI脚本对象库去访问CIM库,管理托管的资源。也就是说,在我们编写脚本的过程大致可以分为这么几步:
  12. 1、         创建WMI对象脚本库的指针实例;
  13. 2、         调用其实例的方法,连接到CIM库,并指明需要访问的资源的逻辑位置;
  14. 3、         获得托管资源也就是类的实例的集合;
  15. 4、         枚举实例,完成工作。
  16. 这几个步骤在我们将来编写的代码中可以明确的反映出来。
  17. 三、常用的命名空间
  18. 命名空间是个很复杂的概念,相信在微软的网站上一定有很多的篇幅介绍这个概念,据我个人理解,命名空间是对类所处逻辑位置的一个约定。打个比方说:张家也有个孩子叫小强,李家也有个孩子小强。大家站在一起,你大声叫"小强",你说这到底是叫哪一个小强呢?张家,李家都是一个姓,一个人的姓实际上就是现实中的一种名字空间。好了,现在你大声叫“张小强”,我们就明确的知道你到底是叫哪一个小强了。这就好比在变量名前加上名字空间前缀。所以可以通俗的说,名字空间就是一个变量的姓氏。问题是这样我们还会碰到一个问题,世界上有很多姓张的,也有可能有很多的张小强,这怎么办呢?这时候我们可以这样说"张老三家的小强",张是一个名字空间,张老三又是张下面的二级名字空间.
  19. 张.老三的家.小强 = 110
  20. 张.三丰的家.小强= 119
  21. 也许说的更糊涂,但大致就这样吧,我本来也就不是说明这个的。
  22. 据微软称,WMI的命名空间共有16个,不过不用担心,我们常用的只有两个:
  23. 1、         root\cimv2  在这个命名空间里包括了绝大多数与计算机、操作系统相关联的类。
  24. 2、         root\default  管理注册表的类
  25. 在使用中,我们用一个字符串表示命名空间,就像文件路径一样。
复制代码

TOP

  1. ◎VBS脚本编程简明教程之十七——访问ADO数据库之二
  2. 在学习SQL语句之前,让我们先来对数据库做一个基本的了解。一个数据库中可能包含了很多个基本单位叫做表。表格被分为“行”和“列”。每一行代表表的一个单独组成部分,每一列代表相同性质的一组数据。举例来说,如果我们有一个记载顾客资料的表格,行包括姓、名、地址、城市、国家、生日等。而一列则代表了所有的地址或者国家等。
  3. 一、建立数据表,我们前边说过利用ADOX.Catalog建立数据库和数据表的方法,但是用的似乎不是很多,一般情况下,如果我们需要在数据库中动态建立一个表,我们将工作交给SQL语句来做,其基本语法是:
  4. CREATE TABLE [表格名]([列名1] 数据类型 , [列名2]  数据类型,... )
  5. 例如我们要建立一个基本顾客表:
  6. Create table [顾客表]([姓名] text(8), [性别] text(2),[住址] text(30))
  7. 二、插入数据项
  8. insert into [数据表名称] (数据项1,数据项2,...) values (值1,值2,...)
  9. insert into语句用来添加新的数据到数据库中的指定表。通过(数据项1,数据项2,...) values (值1,值2,...)来为新添加的数据赋初值。
  10. 三、删除数据项
  11. delete from [数据表名称] where [数据项1] like [值1] and/or [数据项2] like [值2] ...作者:临汾市外事旅游局薛靖澜,转载请注明出处]
  12. 四、更新数据项
  13. update [数据表名称] set 数据项1=值1,数据项2=值2,... where [数据项1] like [值1] and/or [数据项2] like [值2] ...
  14. 该语句可以修改数据库中指定数据表内的指定数据,如果不是用where限定条件就表示修改该表内所有的数据条目。
  15. 五、查询数据项
  16. select [数据内容] from [数据表名称] where [数据项1] like [值1] and/or [数据项2] like [值2] ... order by [数据项] asc/desc
  17. [数据内容]部分表示所要选取的表格中的数据项,使用*表示选取全部。[数据表名称]表示要从哪一个表格中选取,如果你没有接触过数据库可能很难了解什么是数据表格,没关系,我将在后面用到它的时候再说明。where表示选取的条件,使用like表示相等,也支持>=这样的判断符号,同时使用多个条件进行选取时中间要使用and进行连接。order by决定数据的排列顺序,asc表示按照[数据项]中的数据顺序排列,desc表示倒序,默认情况为顺序。select语句中除select和from之外其它均为可选项,如果都不填写表示选取该数据表中的全部数据。例如:下面的语句查询某数据库中表名称为:testtable中姓名为“张三”的nickname字段和email字段。
  18. SELECT nickname,email FROM testtable WHERE name='张三'
  19. (一) 选择列表
  20. 选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
  21. 1、选择所有列
  22. 例如,下面语句显示testtable表中所有列的数据:
  23. SELECT * FROM testtable
  24. 2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
  25. 例如:SELECT nickname,email FROM testtable
  26. 3、更改列标题
  27. 在选择列表中,可重新指定列标题。定义格式为:列标题=列名
  28. 列名 列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:
  29. SELECT 昵称=nickname,电子邮件=email FROM testtable
  30. (二) FROM子句指定SELECT语句查询的表。
  31. 最多可指定256个表,它们之间用逗号分隔。如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应加以限定。
  32. ◎VBS脚本编程简明教程之十七——访问ADO数据库之三
  33. (三) WHERE子句设置查询条件
  34. WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:
  35. SELECT * FROM usertable WHERE age>20
  36. WHERE子句可包括各种条件运算符:
  37. 比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
  38. 范围运算符(表达式值是否在指定的范围):BETWEEN…AND…
  39. NOT BETWEEN…AND…
  40. 列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……)
  41. NOT IN (项1,项2……)
  42. 模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE
  43. 空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
  44. 逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR
  45. 1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
  46. 2、列表运算符例:country IN ('Germany','China')
  47. 3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 varchar、text、ntext、datetime和smalldatetime等类型查询。
  48. 可使用以下通配字符:
  49. 百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
  50. 下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。
  51. 方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
  52. [^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
  53. 例如:作者:临汾市外事旅游局薛靖澜,转载请注明出处]
  54. 限制以Publishing结尾,使用LIKE '%Publishing'
  55. 限制以A开头:LIKE '[A]%'
  56. 限制以A开头外:LIKE '[^A]%'
  57. 4、空值判断符例WHERE age IS NULL
  58. 5、逻辑运算符:优先级为NOT、AND、OR
  59. 最后,让我们用一个简单的例子结束这篇教程:
  60. Objku = InputBox("请输入单位数据库的路径","默认位置","d:\jbqk.mdb")
  61. Set Objconn = createobject("adodb.connection")
  62. Objconn.open ="provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Objku
  63. 作者:临汾市外事旅游局薛靖澜,转载请注明出处]
  64. sql = "CREATE TABLE [单位资料](ID Autoincrement PRIMARY KEY,[姓名] text(8),[性别] text(2),[科室] text(6),[住址] text(30))"
  65. Objconn.execute(sql)
  66. sql = "INSERT INTO [单位资料]([姓名],[性别],[科室],[住址]) VALUES('张三','男','行管科','解放路12号')"
  67. Objconn.execute(sql)
  68. sql = "INSERT INTO [单位资料]([姓名],[性别],[科室],[住址]) VALUES('李斯','女','市场科','五一路12号')"
  69. Objconn.execute(sql)
  70. sql = "DELETE FROM [单位资料] WHERE [姓名] = '张三' "
  71. Objconn.execute(sql)
  72. sql = "UPDATE [单位资料]"
  73. sql = "SELECT COUNT(ID) FROM [单位资料]"
复制代码

TOP

  1. ◎VBS脚本编程简明教程之十七——访问ADO数据库之一
  2. ADO是Microsoft提供和建议使用的新型数据访问接口,它是建立OLEDB之上的一个抽象层。微软公司在操作系统中默认提供了 Access 的 ODBC 驱动程序以及 JET 引擎,
  3. 一、对ADO对象的主要操作,一般包括6个方面:
  4. 1.连接到数据源。通常使用ADO的Connection对象。一般使用相应的属性打开到数据源的连接,设置游标的位置,设置默认的当前数据库,设置将使用的OLEDBProvider,直接提交SQL脚本等。
  5. 2.向数据源提交命令。通常涉及ADO的Command对象。可查询数据库并返回结果在Recordset对象中。
  6. 3.执行SELECT查询命令。在提交SQL脚本的任务时,不用创建一个Command对象,就可完成查询。
  7. 4.可以通过ADO的Recordset对象对结果进行操作。
  8. 5.更新数据到物理存储。
  9. 6.提供错误检测。通常涉及ADO的Error对象。
  10. 二、ADO中主要对象的功能
  11. Recordset对象,用来封装查询的结果。
  12. Field对象,用来表达一行结果中各子段的类型和值。
  13. Error对象,用来检测和判断在数据库操作中出现的错误,比如连接失败。 在ADO中,许多对象名后多了一个"s",比如Error->Errors,Field->Fields等等。添加"s"意味着是相应对象的Collection(集合)对象,比如Errors是Error对象的Collection对象。Collection有点像数组(Array),但不同的是,Collection可以以不同类型的数据或对象作为自己的元素,而数组中的各元素通常都是相同类型的。所以,在看到一个对象名最后是"s",通常表明这是一个Collection对象,比如Errors中的各元素是由Error对象的实例组成的。
  14. 三、具体应用
  15. 1、创建mdb数据库
  16. ADOX 是ADO 对象的扩展库。它可用于创建、修改和删除模式对象,如数据库和表格等。
  17. 其常用的对象有:Catalog—>创建数据库。Column—>表示表、索引或关键字的列。
  18. Key—>表示数据库表中的关键字。
  19. 常用的方法有: Append 将对象添加到 其集合。Delete 删除集合中的对象。
  20. set cat= createobject("ADOX.Catalog")
  21. cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\shujuku.mdb"
  22. Set  tbl=createobject("ADOX.Table")
  23. tbl.Name ="MyTable"
  24. tbl.Columns.Append  "姓名",  202  'adInteger
  25. tbl.Columns.Append  "性别",  3  'adInteger
  26. tbl.Columns.Append  "工作单位",  202  ,50  'adVarWChar
  27. cat.Tables.Append  tbl
  28. 不过你要操纵数据库就连一个数据库也不建,未免懒惰了点,用代码虽然可以完成,但是我觉得对数据约束完成的比较困难,本代码也就是示范个例子,并不推荐使用此类方法。
  29. 2、打开数据库
  30. Provider=″Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source="
  31. Set Objconn = createobject("ADODB.Connection")
  32. Objconn.Open Provider & "数据库名称"
  33. 3、创建记录集
  34. Set Objrs = CreateObject("ADODB.Recordset")
  35. 4、执行SQL查询语句
  36. Sql="SQL查询语句"  '例如:Select count(*) from table1
  37. Set objrs = objconn.execute(sql)
  38. 一般情况下,我们将绝大多数的操作转化为SQL语句完成。
复制代码

TOP

  1. ◎VBS脚本编程简明教程之十六(响应事件)
  2.         什么是事件?在我看来,事件就象我们手机上的闹钟,闹钟一响,我们就要去做某些特定的事情。或者这样说,事件就像警钟,当程序运行时,有特殊的事情发生,就会激发事件,事件本身就是一条消息,如果你编写的脚本要对事件进行处理,就需要一个特殊的过程或者函数来接受和处理事件。那么这个特殊的过程或者函数在程序运行时,就不断的监听,看系统是否传来了相应的事件,一旦接受到事件,脚本对此作出反应。
  3.         那么事件是从那里来的呢?是否需要我们在脚本中对事件进行编写呢?一般情况下,事件是某个程序在运行中的特殊状态发出的,我们不需要对事件进行编写,只需要编写处理事件的函数。比如说我们用VBS建立了ie的一个实例,那么当ie的窗口被关闭的时候,就会激发出一个叫做OnQuit的事件。
  4. 是不是脚本自然而然就能接受事件并进行处理呢?我们说不是的,在创建对象的时候,我们将使用WSH的CreateObject命令,例如:
  5. Set objie=WScript.CreateObject("internetexplorer.application","event_")
  6. 注意到了吗?多了一个参数,这个参数的作用是什么呢?它叫做事件接收端,当脚本连接的对象包含事件时,如果对象调用的事件是OnBegin,那么WSH将会在脚本中调用一个event_OnBegin的事件处理程序。当然事件接受端并不是固定的,如果对象将其定义为MyObj_的话,那么事件处理程序将是:MyObj_OnBegin。
  7. 是否很熟悉?在打造个性化QQ一讲中,曾经出现过Window_OnSize(cx,cy)函数,它其实就是一个事件处理程序。
  8. 让我们来举个实际的例子完整的看看事件的处理过程:
  9. Set objie=WScript.CreateObject("InternetExplorer.Application","event_")
  10. objie.Visible=True
  11. MsgBox "请关闭浏览器窗口看看效果!",VBSystemModal
  12. WScript.sleep 6000
  13. MsgBox "现在已经正常关闭了"
  14. Sub event_onquit()
  15. MsgBox "您确定要关闭浏览器吗?",VBSystemModal
  16. End Sub
  17. 这段脚本打开了一个IE窗口,然后要求你关闭IE窗口,当你关闭窗口的时候,自动调用事件响应程序。
复制代码

TOP

  1. ◎VBS脚本编程简明教程之十五(VBS内置函数)
  2. Abs 函数:返回数的绝对值。
  3. Array 函数:返回含有数组的变体。
  4. Asc 函数:返回字符串首字母的 ANSI 字符码。
  5. Atn 函数:返回数值的反正切。
  6. CBool 函数:返回已被转换为 Boolean 子类型的变体的表达式。
  7. CByte 函数:返回已被转换为字节子类型的变体的表达式。
  8. CCur 函数:返回已被转换为货币子类型的变体的表达式。
  9. CDate 函数:返回已被转换为日期子类型的变体的表达式。
  10. CDbl 函数:返回已被转换为双精度子类型的变体的表达式。
  11. Chr 函数:返回与指定的 ANSI 字符码相关的字符。
  12. CInt 函数:返回已被转换为整形子类型的变体的表达式。
  13. CLng 函数;返回已被转换为Long子类型的变体的表达式。
  14. Cos 函数:返回角度的余弦。
  15. CreateObject 函数:创建并返回对"自动"对象的引用。
  16. CSng 函数:返回已被转换为单精度子类型的变体的表达式。
  17. CStr 函数:返回已被转换为字符串子类型的变体的表达式。
  18. Date 函数:返回当前系统日期。
  19. DateAdd 函数:返回的日期已经加上了指定的时间间隔。
  20. DateDiff 函数:返回两个日期之间的间隔。
  21. DatePart 函数:返回给定日期的指定部分。
  22. DateSerial 函数:返回指定年月日的日期子类型的变体。
  23. DateValue 函数:返回日期子类型的变体。
  24. Day 函数:返回日期,取值范围为 1 至 31。
  25. Eval 函数:计算表达式并返回结果。
  26. Exp 函数:返回 e (自然对数的底) 的多少次方。
  27. Filter 函数:根据指定的筛选条件,返回含有字符串数组子集的、下限为 0 的数组。
  28. Fix 函数:返回数的整数部分。
  29. FormatCurrency 函数:返回的表达式为货币值格式,其货币符号采用系统控制面板中定义的。
  30. FormatDateTime 函数:返回的表达式为日期和时间格式。
  31. FormatNumber 函数:返回的表达式为数字格式。
  32. FormatPercent 函数:返回的表达式为百分数(乘以 100)格式,后面有 % 符号。
  33. GetObject 函数:返回从文件对"自动"对象的引用。
  34. GetRef 函数:返回对能够绑定到一事件的过程的引用。
  35. Hex 函数:返回一字符串,代表一个数的十六进制值。
  36. Hour 函数:返回表示钟点的数字,取值范围为 0 至 23。
  37. InputBox 函数:在对话框中显式一提示,等待用户输入文本或单击按钮,并返回文本框的内容。
  38. InStr 函数:返回一个字符串在另一个字符串中首次出现的位置。
  39. InStrRev 函数;返回一个字符串在另一个字符串中出现的位置,但是从字符串的尾部算起。
  40. Int 函数:返回数的整数部分。
  41. IsArray 函数:返回 Boolean 值,反映变量是否为数组。
  42. IsDate 函数:返回 Boolean 值,反映表达式能否转换为日期。
  43. IsEmpty 函数:返回 Boolean 值,反映变量是否已被初始化。
  44. IsNull 函数:返回 Boolean 值,反映表达式是否含有无效数据(Null)。
  45. IsNumeric 函数:返回 Boolean 值,反映表达式能否转换为数字。
  46. IsObject 函数:返回 Boolean 值,反映表达式是否引用了有效的"自动"对象。
  47. Join 函数:返回通过连接许多含有数组的子串而创建的字符串。
  48. LBound 函数;返回指定维数数组的最小有效下标。
  49. LCase 函数:返回的字符串已被转换为小写字母。
  50. Left 函数:返回字符串最左边的指定数量的字符。
  51. Len 函数:返回字符串中的字符数或存储变量所需的字节数。
  52. LoadPicture 函数:返回图片对象。只用于 32 位平台。
  53. Log 函数:返回数的自然对数。
  54. LTrim 函数;返回去掉前导空格的字符串。
  55. Mid 函数:从字符串中返回指定数量的字符。
  56. Minute 函数:返回分钟数,取值范围为 0 至 59。
  57. Month 函数:返回表示月份的数,取值范围为 1 至 12。
  58. MonthName 函数:返回表示月份的字符串。
  59. MsgBox 函数:在对话框中显示消息,等待用户单击按钮,并返回表示用户所击按钮的数值。
  60. Now 函数:返回计算机的当前系统日期和时间。
  61. Oct 函数:返回表示该数八进制数值的字符串。
  62. Replace 函数:返回一字符串,其中指定的子串已被另一个子串替换了规定的次数。
  63. RGB 函数:返回代表 RGB 颜色值的数字。
  64. Right 函数:返回字符串最右边的指定数量的字符。
  65. Rnd 函数:返回随机数。
  66. Round 函数:返回指定位数、四舍五入的数。
  67. RTrim 函数:返回去掉尾部空格的字符串副本。
  68. ScriptEngine 函数:返回反映使用中的脚本语言的字符串。
  69. ScriptEngineBuildVersion 函数:返回使用中的脚本引擎的编译版本号。
  70. ScriptEngineMajorVersion 函数:返回使用中的脚本引擎的主版本号。
  71. ScriptEngineMinorVersion 函数:返回使用中的脚本引擎的次版本号。
  72. Second 函数:返回秒数,取值范围为 0 至 59。
  73. Sgn 函数:返回反映数的符号的整数。
  74. Sin 函数:返回角度的正弦值。
  75. Space 函数:返回由指定数量的空格组成的字符串。
  76. Split 函数:返回下限为 0 的、由指定数量的子串组成的一维数组。
  77. Sqr 函数:返回数的平方根。
  78. StrComp 函数:返回反映字符串比较结果的数值。
  79. String 函数:返回指定长度的重复字符串。
  80. StrReverse 函数:返回一字符串,其中字符的顺序与指定的字符串中的顺序相反。
  81. Tan 函数:返回角度的正切值。
  82. Time 函数:返回表示当前系统时间的"日期"子类型的"变体"。
  83. Timer 函数:返回时经子夜 12:00 AM 后的秒数。
  84. TimeSerial 函数:返回含有指定时分秒时间的日期子类型的变体。
  85. TimeValue 函数:返回含有时间的日期子类型的变体。
  86. Trim 函数:返回去掉前导空格或尾部空格的字符串副本。
  87. TypeName 函数:返回一字符串,它提供了关于变量的变体子类型信息。
  88. UBound 函数:返回指定维数数组的最大有效下标。
  89. UCase 函数:返回的字符串已经被转换为大写字母。
  90. VarType 函数:返回标识变体子类型的数值。
  91. Weekday 函数:返回表示星期几的数值。
  92. WeekdayName 函数:返回表示星期几的字符串。
  93. Year 函数:返回表示年份的数值。
复制代码

TOP

  1. ◎VBS脚本编程简明教程之十四(使用dictionary对象)
  2.     VBS中存在一个特殊的对象-dictionnary,是一个集合对象。一般情况下,我把这个特殊的集合想象为数组,可以使用其中内建的函数完成存储和操纵数据等基本任务,无须担心数据是在哪些行列,使用唯一的键进行访问或者是一个只能运行在内存中的数据库,并只有两个字段分别是:key和item,在使用中,字段key是索引字段。
  3. set sdict=CreateObject("Scripting.Dictionary")
  4. sdict.add "a","apple"
  5. sdict.add "b","banana"
  6. sdict.add "c","copy"
  7. for each key in sdict.keys
  8. MsgBox     "键名" &   key     & "是" & " = " & sdict (key)
  9. next
  10. sdict.removeall
  11. 这个脚本很简单,就是定义了一个 dictionary 对象的实例sdict,并加入了三条数据,然后对每一条数据进行了枚举,最后,将对象的实例清空。
  12. Dictionary 对象的成员概要
  13. 属性和说明
  14. CompareMode    设定或返回键的字符串比较模式
  15. Count     只读。返回 Dictionary 里的键/条目对的数量
  16. Item(key)  设定或返回指定的键的条目值
  17. Key(key)  设定键值
  18. 方法和说明
  19. Add(key,item)  增加键/条目对到 Dictionary
  20. Exists(key)  如果指定的键存在,返回 True,否则返回 False
  21. Items()  返回一个包含 Dictionary 对象中所有条目的数组
  22. Keys()  返回一个包含 Dictionary 对象中所有键的数组
  23. Remove(key)  删除一个指定的键/条目对
  24. RemoveAll()   删除全部键/条目对
复制代码

TOP

  1. ◎VBS脚本编程简明教程之十三(WMI基础)
  2.       WMI即Windows 管理规范,是用户管理本地和远程计算机的一种模型。通过它可以访问、配置、管理和监视几乎所有的 Windows 资源。WMI的语法十分简单,基本上常见的命名空间、对象等用几乎一模一样。它对应的是Windows里的WMI服务(winmgmt)。
  3. 一、WMI的起源
  4. 几年前,几家资深的计算机公司由于系统管理领域缺少标准,委托DMTF启动了CIM(通用信息模型)项目,理想的CIM是一种不受限制于任何特定实现环境的管理工具。WMI是CIM的微软实现,它有很多类是从CIM中派生出来的。
  5. 二、WMI的命名空间
  6. 那么命名空间是做什么作用的呢?我简单这样说,在同一段代码中,如果有两个变量或函数的名字完全相同,就会出现冲突。命名空间就是为解决变量、函数的命名冲突而服务的。解决的办法就是将你的变量定义在一个不同名字的命名空间中。就好像财政局有个张三,公安局也有个张三,但我们清楚,就是因为他们分属不同的单位。有些地方可能不太准确,但大致意思就是这样了。
  7. WMI的命名空间创建了一个层次结构,有点类似于我们的目录文件结构。
  8. 1、  root-作为所有其他名字的占位符;
  9. 2、  root\default-与注册表操作有关的类;
  10. 3、  root\security-与系统安全有关的类;
  11. 4、  root\cimv2-从CIM派生的类,代表我们最常用的工作环境。
  12. 三、WMI的对象路径
  13. WMI的对象路径用来在CIM库中定位类和它的事例,对象路径用两个反斜杠\\开头,第一个元素是目标计算机的名字,第二个元素是相应的WMI命名空间,第三个元素是相应的类名,并用 : 将它与命名空间分隔开来。例如:\\..\root\cimv2:win32_service
  14. 其中那个 . 代表是本地系统。
  15. 四、WMI的查询语言——WQL仅仅是ANSI SQL的一个子集,只能用于数据的提取。
  16. 数据、事件查询的基本语法为:
  17. Select pro1 , pro2 , pro3  from myclass(myclassevent)
  18. 例如:Select name , path from Win32_share  说明:列出所有共享的名称和路径
  19. 也可以使用通配符 * ,例如:Select * from Win32_share
  20. 关键字Where 用于限定查询的范围。
  21. 例如:Select * from Win32_share where name="Admin"
  22. 五、WMI脚本中使用的三个步骤
  23. 步骤 1:连接到 WMI 服务
  24. 在任何 WMI 脚本中,第一个步骤都是建立一个到目标计算机上的 Windows 管理服务的连接。方法是调用 VBScript 的 Getobject 函数并将 WMI 脚本库的名字对象的名称(即"winmgmts:",后跟目标计算机的名称)传递到 Getobject,并返回一个对象的引用,此时,您就可以调用其提供的方法如:InstancesOf,正如方法名所示,InstancesOf 返回由资源的类名标识的托管资源的所有实例。
  25. 步骤 2:检索 WMI 托管资源的实例
  26. 一般采用WQL来实现。
  27. 步骤 3:显示 WMI 托管资源的属性
  28. 最后一个步骤是枚举 检索得到集合的内容。一般采用
  29. For each enum in  myclass
  30. ……
  31. Next       结构来实现。
  32. 六、WMI 测试器 (wbemtest.exe)验证脚本执行结果
  33. 现在,您对可用于浏览和查看 CIM 的工具已经有了一些认识,让我们使用 WMI 测试器 (wbemtest.exe) 来检查 Win32_Process 类定义,以便从在您的本地计算机上运行的进程检索一些属性。
  34. 1.打开一个命令提示,键入 C:\>按下 Enter 来开始 WMI 测试器工具。请注意,大部分按钮在主 WMI 测试器窗口上是被禁用的,这说明此时您没有连接到 WMI。
  35. 2.单击 "连接"按钮 连接到本地或远程计算机上的 WMI 服务。显示"连接"对话框,它提供一个标记为 名称空间 的文本输入区域,该区域默认值为 root\default。将 名称空间 区域的值更改为 root\cimv2,单击"连接"对话框的 连接 按钮返回到主 WMI 测试器窗口。
  36. 3.主窗口中左上角的命名空间标识符应该显示为 root\cimv2。请注意,所有的按钮现在都已启用,这说明在当前凭据环境下,您已经成功连接到本地主机上的 WMI。单击 枚举类别 打开"超类信息"对话框。
  37. 4.在"超类信息"对话框中,不要填写 输入超类别名称 区域,单击 递归 选项,单击 确定 以枚举 root\cimv2 名称空间中定义的所有 CIM 类。
  38. 请注意,列于"查询结果"对话框顶部的类是以两个下划线为开头的。这些是系统类。系统类是预定义的 CIM 类,支持内部 WMI 配置与操作,例如提供程序注册、命名空间安全性及事件通知等。现在,忽略系统类,向下滚动"查询结果"对话框直至看到以 CIM_ 开头的类。名称以 CIM_ 开头的类是由 DMTF 维护的核心与公共基类。继续向下滚动直至到达以 Win32_ 开头的类。名称以 Win32_ 开头的类是 Microsoft 扩展类,表示 Windows 特定的托管资源。如果这是您第一次检查 root\cimv2 命名空间,您可能希望熟悉root\cimv2 命名空间中的类的完整集合,尤其是有 Win32_ 前缀的类。
  39. 5.向下滚动"查询结果"对话框直至到达 Win32_Process 类,双击该类名打开 Win32_Process 对话框的对象编辑器。
  40. 6."对象编辑器"对话框显示被选定类的定义和实现的详细信息(属性和方法)。选择 Hide System Properties 复选框隐藏系统属性。剩余的 Win32_Process 属性表示您可以从在本地或远程计算机上运行的进程检索的信息。
  41. 运行如下代码:
  42. strComputer = "."
  43. Set wbemServices = Getobject("winmgmts:\\" & strComputer)
  44. Set wbemObjectSet = wbemServices.InstancesOf("Win32_Process")
  45. For Each wbemObject In wbemObjectSet
  46.     WScript.Echo "Name:          " & wbemObject.Name      & vbCrLf & _
  47.                  "   Handle:     " & wbemObject.Handle    & vbCrLf & _
  48.                  "   Process ID: " & wbemObject.ProcessID
  49. Next
  50. 7.在运行脚本之后,您可以用 WIMI 测试器验证脚本的结果。在 Win32_Process 对话框的对象编辑器中,单击 Instances。产生的查询结果对话框列出在计算机上运行的进程的实例。双击一个指定的进程实例,查看该实例的详细信息
  51. 阻止客人运行你不想运行的程序
  52. 很多人都有这样的经验,刚刚装好的系统,让人运行了一些你不想他运行的程序,比如说QQ,又是聊天,又是下载表情,不过一会,流氓插件、病毒、木马已经盘踞了你的计算机,常常是忍痛将这个程序卸载,可是不知情的人很自觉的下载安装,使整个系统无法正常运行。
  53. 其实用VBS和wmi结合起来,使你的计算机上有相应的程序安装,别人又无法运行起来太容易了,现在给出代码:
  54. On Error Resume Next    '忽略所有的错误
  55. Dim bag,pipe,honker,good
  56. Do
  57. good="."     '定义为本地计算机
  58. set bag=getobject("winmgmts:\\"& good &"\root\cimv2")     'l连接到cimv2命名空间
  59. set pipe=bag.execquery("select * from win32_process where name='qq.exe' or name='qqgame.exe' or name='winmine.exe'")    '看,这是我的计算机上不允许运行的程序,qq、qqgame、winmine(扫雷)如果你还有其他的程序不允许运行,很简单,在其中添加 or name='你不允许运行的程序名'
  60. for each i in pipe
  61. i.terminate()
  62. '此行其实可有可无,有这行只是为了免去怀疑
  63. MsgBox "发现盗版系统,现已进行功能限制!" & vbcrlf & "请使用正版软件!",,"微软提示"
  64. next
  65. WScript.sleep 60000    '每1分钟检测一次
  66. loop
  67. 那么如果我自己想运行这些程序该怎么办呢?很简单,Ctrl+Alt+Del三个键齐按,打开windows任务管理器,在进程中结束WScript.exe和wmiprvse.exe进程的运行就可以了
复制代码

TOP

  1. ◎VBS脚本编程简明教程之十二(使用系统对话框)
  2.       在VBS脚本设计中,如果能使用windows提供的系统对话框,可以简化脚本的使用难度,使脚本人性化许多,很少有人使用,但VBS并非不能实现这样的功能,方法当然还是利用COM对象。
  3. 1、SAFRCFileDlg.FileSave对象:属性有:FileName — 指定默认文件名;FileType — 指定文件扩展名;OpenFileSaveDlg — 显示文件保存框体方法。
  4. 2、SAFRCFileDlg.FileOpen 对象:FileName — 默认文件名属性;OpenFileOpenDlg — 显示打开文件框体方法。
  5. 3、UserAccounts.CommonDialog对象:Filter — 扩展名属性("VBS File|*.vbs|All Files|*.*");
  6. FilterIndex — 指定
  7. InitialDir — 指定默认的文件夹
  8. FileName — 指定的文件名
  9. Flags — 对话框的类型
  10. Showopen方法:
  11. 很简单,ok,让我们来举两个简单的例子:
  12. 例一:保存文件
  13. Set objDialog = CreateObject("SAFRCFileDlg.FileSave")
  14. Set objFSO = CreateObject("Scripting.FileSystemObject")
  15. objDialog.FileName = "test"
  16. objDialog.FileType = ".txt"
  17. intReturn = objDialog.OpenFileSaveDlg
  18. If intReturn Then
  19. objFSO.CreateTextFile(objDialog.FileName & objdialog.filetype)
  20. Else
  21. WScript.Quit
  22. End If
  23. 注意:1、SAFRCFileDlg.FileSave对象仅仅是提供了一个方便用户选择的界面,本身并没有保存文件的功能,保存文件还需要使用FSO对象来完成。2、用FileType属性来指定默认的文件类型。3、在调用OpenFileSaveDlg方法时,最好把返回值保存到一变量中,用它可以判断用户按下的是确定还是取消。
  24. 例二:.打开文件
  25. set objFile = CreateObject("SAFRCFileDlg.FileOpen")
  26. intRet = objFile.OpenFileOpenDlg
  27. if intret then
  28. MsgBox "文件打开成功!文件名为:" & objFile.filename
  29. else
  30. WScript.quit
  31. end if
  32. 例三:比较复杂的打开文件对话框
  33. Set objDialog = CreateObject("UserAccounts.CommonDialog")
  34. objDialog.Filter = "VBS File|*.vbs"
  35. objDialog.InitialDir = "c:\"
  36. tfile=objDialog.ShowOpen
  37. if tfile then
  38. strLoadFile = objDialog.FileName
  39. MsgBox strLoadFile
  40. else
  41. WScript.quit
  42. end if
  43. 说明:在脚本中加入 objDialog.Flags = &H020 看看会出现什么结果。
复制代码

TOP

  1. ◎VBS脚本编程简明教程之十一(FSO中文件的基本操作)
  2. 一、文件属性:
  3. 在windows中,文件的属性一般用数字来表示:
  4. 0代表normal,即普通文件未设置任何属性。
  5. 1代表只读文件
  6. 2代表隐藏文件
  7. 4代表系统文件
  8. 16代表文件夹或目录
  9. 32代表存档文件
  10. 1024代表链接或快捷方式
  11. 例如:
  12. set fs=WScript.CreateObject("scripting.filesystemobject")
  13. set f=fs.getfile("d:\index.txt")
  14. MsgBox f.Attributes  'attributes函数的作用是显示文件属性
  15. 需要说明的是:MsgBox显示的结果往往不是上面说明的数字,而是有关属性代表数字的和。
  16. 二、创建文件:object.createtextfile方法,注意创建前一般需要检查文件是否存在。
  17. 例如:set fso=WScript.CreateObject("scripting.filesystemobject")
  18. if fso.fileexists("c:\kk.txt") then
  19. MsgBox "文件已存在"
  20. else
  21. set f=fso.createtextfile("c:\kk.txt")
  22. end if
  23. 如需要强制覆盖已存在的文件,则在文件名后加true参数。
  24. 三、复制、移动、删除文件:使用copyfile方法、movefile方法、deletefile方法。例如:
  25. set fso=WScript.CreateObject("scripting.filesystemobject")
  26. fso.copyfile "c:\kk.txt","d:\1\kk.txt",true   '如上文说述,true代表强制覆盖
  27. fso.movefile "c:\kk.txt", "d:\"  '移动文件
  28. fso.deletefile "c:\kk.txt"  '删除文件
  29. 四、文件的读写:
  30. 1、打开文件:使用opentextfile方法
  31. 如:set ts=fso.opentextfile("c:\kk.txt",1,true)
  32. 说明:第二个参数为访问模式,1为只读、2写入、8为追加;第三个参数指定如文件不存在则创建。
  33. 2、读取文件:read(x)读x个字符;readline读一行;readall全部读取
  34. 如:set ffile=fso.opentextfile("c:\kk.txt",1,true)
  35. value=ffile.read(20)
  36. line=ffile.readline
  37. contents=ffile.readall
  38. 3、常见的指针变量:
  39. atendofstream属性:当处于文件结尾的时候这个属性返回true。一般用循环检测是否到达文件末尾。例如:
  40. do while ffile.atendofstream<>true
  41. ffile.read(10)
  42. loop
  43. atendofline属性:如果已经到了行末尾,这个属性返回true。
  44. Column属性(当前字符位置的列号)和line属性(文件当前行号):在打开一个文件后,行和列指针都被设置为1。
  45. 4、在文件中跳行:skip(x)  跳过x个字符;skipline  跳过一行
  46. 5、在文件中写入字符:可以用2(写入)和8(追加)的方式来写入
  47. 其方法有:write(x)写入x字符串;writeline(x)写入x代表的一行
  48. writeblanklines(n) 写入n个空行
  49. 注意:最后一定要使用close方法关闭文件。读文件后一定要关闭,才能以写的方式打开。
复制代码
1

评分人数

TOP

返回列表