标题:
[技术讨论]
vbs中的"Wscript.Shell"[属性与方法]
[打印本页]
作者:
czjt1234
时间:
2012-10-18 09:29
标题:
vbs中的"Wscript.Shell"[属性与方法]
Wscript.Shell 创建 WshShell 对象,提供对本地 Windows 外壳程序的访问
属性
CurrentDirectory 返回或设置当前目录
Environment 环境变量。返回 WshEnvironment 对象
SpecialFolders 特殊文件夹。返回 WshSpecialFolders 对象
方法
AppActivate 激活指定窗口
CreateShortcut 创建或打开快捷方式。返回 WshShortcut 对象或 WshUrlShortcut 对象
Exec 运行程序。返回 WshScriptExec 对象
ExpandEnvironmentStrings 返回环境变量的值
LogEvent 添加"应用程序"日志
Popup 弹出对话框
RegDelete 删除指定的注册表项目
RegRead 读取指定的注册表项目
RegWrite 新建或修改指定的注册表项目
Run 运行程序。可返回一个整数值
SendKeys 将一个或多个键击发送到活动窗口(仿佛是在键盘上击键一样)
WshShell 对象及其属性、方法,都可以在 Script5.6.chm 里找到参考
-----------------------------------------------------------------------------
WshShell 对象的属性和方法,创建了
WshEnvironment 对象
WshScriptExec 对象
WshShortcut 对象
WshSpecialFolders 对象
WshUrlShortcut 对象
作者:
czjt1234
时间:
2012-10-18 09:32
本帖最后由 czjt1234 于 2012-10-18 14:15 编辑
下面是 WshShell 对象的属性和方法的参数,及用法举例
代码测试环境:winxpsp3 IE8 Wscript版本5.7.0.18066
'-------------------------------------------------------------
Dim objWsh, intNumber, strRead, objExec
Dim objWshEnv, objWshSpe, objLink, objUrlLink, objWshExec
set objWsh = CreateObject("Wscript.Shell")
'返回 WshShell 对象
'-------------------------------------------------------------
objwsh.AppActivate "Title"|ProcessID '激活指定窗口,可以是标题栏或进程ID
strRead = objwsh.CurrentDirectory '读取当前目录
objwsh.CurrentDirectory = "C:\Program Files" '更改当前目录
strRead = objwsh.ExpandEnvironmentStrings("%WinDir%\System32\")
'将指定变量名返回为完整路径,即"扩展变量"
'-------------------------------------------------------------
objwsh.SendKeys strRead '向当前活动窗口发送按键
'下面是操作键的发送代码
退格键 {BACKSPACE}、{BS} 或 {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL 或 DELETE {DELETE} 或 {DEL}
向下键 {DOWN}
END {END}
ENTER {ENTER} 或 ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS 或 INSERT {INSERT} 或 {INS}
向左键 {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
向右键 {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
向上键 {UP}
F1 至 F12 {F1} 至 {F12}
SHIFT +
CTRL ^
ALT %
+ { 等修饰符 {+} {{} {^} {}} {%}
'如果在按 e 和 c 的同时按 SHIFT 键,则发送字符串参数 +(ec)
'可发送一个键的重复键击。如10次x,为{x 10},但不可发送10次组合键,如Ctrl+x
'不能发送 PRINT SCREEN 键 {PRTSC}
'常用 Wscript.Sleep 来延时若干毫秒发送按键,避免程序来不及响应
'-------------------------------------------------------------
intNumber = objWsh.Popup(strText, nSecondsToWait, strTitle, nType)
'弹出式消息框。比 Msgbox 多了等待选择时间参数,少了帮助参数
'返回值intNumber代表如下按钮:
vbOK = 1 '确定
vbCancel = 2 '取消
vbAbort = 3 '放弃
vbRetry = 4 '重试
vbIgnore = 5 '忽略
vbYes = 6 '是
vbNo = 7 '否
-1 '选择超时
参数:
strText '要显示的文本信息
nSecondsToWait '等待选择的秒数。若选择超时,消息框自动关闭,返回值 -1
'缺省值 0 秒,必须选择一个按钮,消息框才会关闭
strTitle '弹出式消息框的标题。缺省值 "Windows Script Host"
nType '要显示的按钮和图标类型。缺省值 0
0 显示“确定”按钮
1 显示“确定”和“取消”按钮
2 显示“放弃”、“重试”和“忽略”按钮
3 显示“是”、“否”和“取消”按钮
4 显示“是”和“否”按钮
5 显示“重试”和“取消”按钮
16 显示“停止标记”图标
32 显示“问号”图标
48 显示“感叹号”图标
64 显示“信息标记”图标
'-------------------------------------------------------------
'注册表操作
objWsh.RegWrite "HKLM\SOFTWARE\test", &HFFFF&, "REG_SZ|REG_DWORD|REG_BINARY"
'创建/修改指定键
'&HFF表示16进制数FF。当数值较大时,vbs处理有问题,需在数字后面加&
参数:
REG_SZ 字符型,键值用""括起来。缺省值
REG_DWORD 双字节型
REG_BINARY 二进制型
strRead = objWsh.RegRead("HKLM\SOFTWARE\test") '读取指定键值
objWsh.RegDelete "HKLM\SOFTWARE\test" '删除指定键
objWsh.RegWrite "HKLM\SOFTWARE\test\", "", "REG_SZ" '创建一个项,默认值为空
objWsh.RegDelete "HKLM\SOFTWARE\test\" '删除指定项。可以有键,不能有子项
'-------------------------------------------------------------
objwsh.Run strCommand, intWindowStyle, True|False
'运行指定程序
'参数:strCommand 要运行的命令行及参数
'参数:True|False 是否等命令执行完毕。缺省值False
'参数:intWindowStyle 窗口状态。一般只用到:0隐藏窗口,1显示窗口。缺省值1
'intWindowStyle 有如下可选值:
0 隐藏一个窗口并激活另一个窗口
1 激活并显示窗口。如果窗口处于最小化或最大化状态,则系统将其还原到原始大小和位置
第一次显示该窗口时,应用程序应指定此标志
2 激活窗口并将其显示为最小化窗口
3 激活窗口并将其显示为最大化窗口
4 按最近的窗口大小和位置显示窗口。活动窗口保持活动状态
5 激活窗口并按当前的大小和位置显示它
6 最小化指定的窗口,并按照 Z 顺序激活下一个顶部窗口
7 将窗口显示为最小化窗口。活动窗口保持活动状态
8 将窗口显示为当前状态。活动窗口保持活动状态
9 激活并显示窗口。如果窗口处于最小化或最大化状态,则系统将其还原到原始大小和位置
还原最小化窗口时,应用程序应指定此标志
10 根据启动应用程序的程序状态来设置显示状态
objwsh.Run "notepad.exe D:\新建 文本文档.txt" '命令行的参数可以有空格
objwsh.Run """C:\Program Files\WinRAR\WinRAR.exe""" '命令行带空格,要3对""。可以用Chr(34)代替2对""
strRead = "notepad.exe " + "D:\新建 文本文档.txt" '连接字符串时注意命令行后加个空格
objwsh.Run "cmd.exe /k echo ""strRead"" strRead " '运行cmd时,注意参数里的"和变量名
'该方法有返回码
intNumber = objwsh.Run("notepad.exe", , True)
'正常关闭,返回0
'任务管理强制结束,返回1
intNumber = objwsh.Run("cmd.exe /k xcopy", , True)
'输入exit正常关闭,返回值为cmd的错误码%errorlevel%
'任务管理强制结束,返回1
'点cmd窗口右上角的关闭按钮,(winxpsp3)返回-1073741510
'输入 exit /b 111 正常关闭,返回111
'-------------------------------------------------------------
objWsh.LogEvent intType, strMessage, strTarget
'添加"应用程序"日志。日志的"来源"显示为 WSH
'参数:
intType 整数值,代表日志类型(事件 ID)
strMessage 对错误的描述
strTarget 产生错误的计算机名。缺省值为本机名
intType 有如下可选值:
0 无
1 错误
2 警告
4 信息
8 成功审核
16 失败审核
'-------------------------------------------------------------
作者:
czjt1234
时间:
2012-10-18 09:46
WshShell 对象的 Environment 属性返回 WshEnvironment 对象
WshEnvironment 对象提供对 Windows 环境变量的访问
属性
Item 缺省属性,指定一个环境变量条目
方法
Count 环境变量的个数
Remove 删除指定的环境变量
'-------------------------------------------------------------
下面是 WshEnvironment 对象的属性和方法的参数,及用法举例
代码测试环境:winxpsp3 IE8 Wscript版本5.7.0.18066
'-------------------------------------------------------------
Dim objWsh, intNumber, strRead, objExec
Dim objWshEnv, objWshSpe, objLink, objUrlLink, objWshExec
set objWsh = CreateObject("Wscript.Shell")
'-------------------------------------------------------------
Set objWshEnv = objWsh.Environment("System|User|Volatile|Process")
'返回 WshEnvironment 对象
'共4种环境变量集合
intNumber = objWshEnv.count '所含环境变量的个数
objWshEnv.Item("path1") = "test" '添加/修改一个环境变量
strRead = objWshEnv.Item("path1") '读取指定的环境变量的值
objWshEnv.Remove("path1") '删除指定的环境变量
For Each strRead in objWshEnv '枚举所有变量
Msgbox strRead
Next
'全部的 winxpsp3 环境变量:
System User Volatile Process
------------------------------------------------------------------------
TEMP TEMP TEMP
TMP TMP TMP
NUMBER_OF_PROCESSORS NUMBER_OF_PROCESSORS
OS OS
Path Path
PATHEXT PATHEXT
PROCESSOR_ARCHITECTURE PROCESSOR_ARCHITECTURE
PROCESSOR_IDENTIFIER PROCESSOR_IDENTIFIER
PROCESSOR_LEVEL PROCESSOR_LEVEL
PROCESSOR_REVISION PROCESSOR_REVISION
FP_NO_HOST_CHECK FP_NO_HOST_CHECK
windir windir
ComSpec ComSpec
LOGONSERVER LOGONSERVER
CLIENTNAME CLIENTNAME
SESSIONNAME SESSIONNAME
APPDATA APPDATA
HOMEDRIVE HOMEDRIVE
HOMESHARE
HOMEPATH HOMEPATH
CommonProgramFiles
COMPUTERNAME
ALLUSERSPROFILE
ProgramFiles
USERNAME
SystemDrive
SystemRoot
USERDOMAIN
USERPROFILE
'-------------------------------------------------------------
作者:
czjt1234
时间:
2012-10-18 09:48
WshShell 对象的 SpecialFolders 属性返回 WshSpecialFolders 对象
WshSpecialFolders 对象提供对 Windows 特殊文件夹的访问
属性
Item 缺省属性,指定一个特殊文件夹条目
方法
Count 特殊文件夹的个数
'-------------------------------------------------------------
下面是 WshSpecialFolders 对象的属性和方法的参数,及用法举例
代码测试环境:winxpsp3 IE8 Wscript版本5.7.0.18066
'-------------------------------------------------------------
Dim objWsh, intNumber, strRead, objExec
Dim objWshEnv, objWshSpe, objLink, objUrlLink, objWshExec
set objWsh = CreateObject("Wscript.Shell")
'-------------------------------------------------------------
set objWshSpe = objWsh.SpecialFolders
'返回 WshEnvironment 对象
strRead = objWshSpe.Item("Desktop") '读取指定条目的完整路径
intNumber = objWshSpe.Count '特殊文件夹的个数
For intNumber = 0 To objWshSpe.Count - 1
MsgBox objWshSpe.Item(intNumber) '枚举所有特殊文件夹
Next
'winxpsp3 操作系统支持下列18个特殊文件夹
AllUsersDesktop
AllUsersStartMenu
AllUsersPrograms
AllUsersStartup
Desktop
AppData
PrintHood
Templates
Fonts
NetHood
Desktop
StartMenu
SendTo
Recent
Startup
Favorites
MyDocuments
Programs
从第1行到第18行,依次可用编号0~17代表
其中 Desktop 重复,不解
'-------------------------------------------------------------
作者:
czjt1234
时间:
2012-10-18 09:52
本帖最后由 czjt1234 于 2012-10-30 12:38 编辑
WshShell 对象的 CreateShortcut 方法返回 WshShortcut 对象或 WshUrlShortcut 对象
如果快捷方式的后缀名是 .lnk ,则返回的是 WshShortcut 对象
如果快捷方式的后缀名是 .url ,则返回的是 WshUrlShortcut 对象
WshShortcut 对象提供对 .lnk 快捷方式的访问
WshUrlShortcut 对象提供对 .url 快捷方式的访问
'-------------------------------------------------------------
WshShortcut 对象
属性
Arguments 命令行的参数
Description 备注
FullName 快捷方式的完整路径和名称
Hotkey 快捷键
IconLocation 图标。缺省值 0
TargetPath 目标
WindowStyle 运行方式: 1默认窗口(缺省值) 3最大化 7最小化
WorkingDirectory 起始位置
方法
Save (覆盖)保存快捷方式
'-------------------------------------------------------------
WshUrlShortcut 对象
属性
FullName 快捷方式的完整路径和名称
TargetPath 目标
方法
Save (覆盖)保存快捷方式
'-------------------------------------------------------------
下面是 WshShortcut 和 WshUrlShortcut 对象的属性和方法的参数,及用法举例
代码测试环境:winxpsp3 IE8 Wscript版本5.7.0.18066
'-------------------------------------------------------------
Dim objWsh, intNumber, strRead, objExec
Dim objWshEnv, objWshSpe, objLink, objUrlLink, objWshExec
set objWsh = CreateObject("Wscript.Shell")
'-------------------------------------------------------------
strRead = objWsh.SpecialFolders("Desktop") & "\QQ.lnk" '路径+名称,对应 FullName 属性
set objLink = objWsh.CreateShortcut(strRead)
'返回 WshShortcut 对象
With objLink
.TargetPath = "D:\QQ2012\Bin\QQ.exe" '目标
.Arguments = "1 2 /c:f d" '命令行的参数
.WorkingDirectory = "D:\QQ2012\Bin" '起始位置
.Hotkey = "" '快捷键
.WindowStyle = 1|3|7 '运行方式: 1默认窗口(缺省值) 3最大化 7最小化
.Description = "" '备注
.IconLocation = "D:\QQ2012\Bin\QQ.exe, 0" '0表示第一个图标,1代表第二个...
.Save '(覆盖)保存
End With
'快捷方式图标也可以指定一个图标文件
.IconLocation = "D:\ICO\QQ.ico"
'快捷键不区分大小写,如 "CTRL+ALT+F"
'快捷键只能激活位于 Windows 桌面或 Windows“开始”菜单的快捷方式
'读取已存在的快捷方式的属性
With objLink
MsgBox "完整路径和名称:" & .FullName & vbCrLf & vbCrLf & _
"目标:" & .TargetPath & vbCrLf & vbCrLf & _
"快捷键:" & .Hotkey & vbCrLf & vbCrLf & _
"运行方式:" & .WindowStyle & vbCrLf & vbCrLf & _
"备注:" & .Description & vbCrLf & vbCrLf & _
"图标:" & .IconLocation & vbCrLf & vbCrLf & _
"参数:" & .Arguments
End With
'-------------------------------------------------------------
strRead = objWsh.SpecialFolders("Desktop") & "\QQ.url" '路径+名称,对应 FullName 属性
set objUrlLink = objWsh.CreateShortcut(strRead)
'返回 WshUrlShortcut 对象
With objUrlLink
.TargetPath = "
http://www.qq.com
" '目标
.Save '(覆盖)保存
End With
'读取已存在的快捷方式的属性
With With objUrlLink
MsgBox "完整路径和名称: " & .FullName & vbCrLf & vbCrLf & _
"目标: " & .TargetPath
End With
'-------------------------------------------------------------
作者:
czjt1234
时间:
2012-10-18 10:01
本帖最后由 czjt1234 于 2012-10-30 12:46 编辑
WshShell 对象的 Exec 方法返回 WshScriptExec 对象
WshScriptExec 对象提供对运行的程序的输入输出流的访问
属性
ExitCode 进程结束后的返回码
ProcessID 进程ID
Status 进程的运行状态
StdOut 只读输出流
StdIn 只写输入流
StdErr 只读错误信息输出流
方法
Terminate 正常结束进程,但并不等待进程结束就继续执行后续vbs命令
'-------------------------------------------------------------
下面是 WshScriptExec 对象的属性和方法的参数,及用法举例
代码测试环境:winxpsp3 IE8 Wscript版本5.7.0.18066
'-------------------------------------------------------------
Dim objWsh, intNumber, strRead, objExec
Dim objWshEnv, objWshSpe, objLink, objUrlLink, objWshExec
set objWsh = CreateObject("Wscript.Shell")
'-------------------------------------------------------------
Set objExec = objwsh.Exec("calc")
'返回一个 WshScriptExec 对象
'运行calc.exe,就是"计算器"
Msgbox objExec.Status '进程的运行状态
Const WshRunning = 0 '程序仍在运行
Const WshFinished = 1 '程序已结束
Const WshFailed = 2 '??
Msgbox objExec.ProcessID '进程ID
objExec.Terminate '正常结束进程,但并不等待进程结束
Msgbox objExec.ExitCode '进程结束后的返回码,数值和 Run 方法返回的一样
'-------------------------------------------------------------
'WshScriptExec 对象的输入输出流与 Wscript.StdIn StdOut StdErr 不同
'通过如下属性和方法进行访问
Set objExec = objwsh.Exec("cmd.exe")
objExec.StdIn.Write "dir" '输入 dir 命令,但没有回车换行
objExec.StdIn.WriteBlankLines 5 '输入5个空行,相当于5个 vbCrLf
objExec.StdIn.WriteLine "exit" '输入命令,并回车换行
objExec.StdIn.Close '关闭输入流
Msgbox objExec.StdOut.Read(5) '从当前光标位置读取5个字符,并相应移动光标
Msgbox objExec.StdOut.ReadLine '从当前光标位置读取一行,光标移到下一行行首
Msgbox objExec.StdOut.AtEndOfLine '判断当前光标位置是否在某一行末尾
objExec.StdOut.Skip 3 '跳过3个字符,每行末尾的回车换行算2个字符
objExec.StdOut.SkipLine '跳过一行,当前光标位置移到下一行行首
Msgbox objExec.StdOut.Line '返回当前光标所在行号
Msgbox objExec.StdOut.Column '返回当前光标所在列号
Msgbox objExec.StdOut.AtEndOfStream '判断当前光标位置是否在文末
Msgbox objExec.StdOut.ReadAll '从当前光标位置读取文件所有内容,光标移到文末
objExec.StdOut.Close '关闭输出流
strRead = objExec.StdOut.ReadAll
'Exec 运行程序,并不等待程序执行完毕。读取所有输出流,则可以起到等程序结束的效果
'StdErr 和 StdOut 的方法属性完全一样
'-------------------------------------------------------------
'一个小Bug
Msgbox objExec.StdOut.ReadLine 'Close 之前用 ReadLine 方法
objExec.StdOut.Close
Msgbox objExec.StdOut.ReadLine '这行还可以运行
Msgbox objExec.StdOut.ReadLine '这行才报错,因为对象已经 Close
'-------------------------------------------------------------
附:Run 和 Exec 的方法声明
Function Exec(ByVal Command As String) As WshExec
Function Run(ByVal Command As String, [ByVal WindowStyle], [ByVal WaitOnReturn]) As Integer
'-------------------------------------------------------------
欢迎光临 批处理之家 (http://bathome.net./)
Powered by Discuz! 7.2