Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6324|回复: 5

[分享] WshShell 对象的方法和属性的小例子

[复制链接]
发表于 2012-2-29 16:57 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2012-6-7 21:45 编辑



1) 前期绑定
Dim WshShell As New WshShell

2) 后期绑定
Dim WshShell As Object
Set WshShell = CreateObject("WScript.Shell")







AppActivate
方法
激活一应用程序窗口
CreateShortcut
方法
创建并返回 WshShortcut 对象。
Exec
方法
执行一个外部命令,返回一个对象。
ExpandEnvironmentStrings
方法
扩展 PROCESS 环境变量并返回结果字符串。
LogEvent
方法
写入事件查看器日志
Popup
方法
显示包含指定消息的消息窗口。
RegDelete
方法
从注册表中删除指定的键或值。
RegRead
方法
从注册表中返回指定的键或值。
RegWrite
方法
在注册表中设置指定的键或值。
Run
方法
创建新的进程,该进程用指定的窗口样式执行指定的命令。
SendKeys
方法
发送按键消息
CurrentDirectory
属性
当前目录
Environment
属性
返回 WshEnvironment 集合对象。
SpecialFolders
属性
使用 WshSpecialFolders 对象提供对 Windows shell 文件夹的访问,如桌面文件夹,开始菜单文件夹和个人文档文件夹。





'**************************************************************************************
Sub testAppActivate()
    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")
    '运行前,请确保windows("无标题 - 记事本")已存在。
    WshShell.AppActivate ("无标题 - 记事本")
End Sub
'**************************************************************************************
Sub testCreateShortcut()    '建立快捷方式
    Dim WshShell As Object, oShellLink As Object, oUrlLink As Object
    Set WshShell = CreateObject("WScript.Shell")
    '指向对象
    Set oShellLink = WshShell.CreateShortcut("C:\test.lnk")
    oShellLink.TargetPath = ThisWorkbook.FullName
    oShellLink.Save
    '指向网址
    Set oUrlLink = WshShell.CreateShortcut("c:\Excelpx精英培训.URL")
    oUrlLink.TargetPath = "http://www.excelpx.com"
    oUrlLink.Save
End Sub
'**************************************************************************************
Sub testExec()    '执行一个外部命令
    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Exec "winmine"     '扫雷
    WshShell.Exec "calc"        '计算器
End Sub
'**************************************************************************************
Sub testExpandEnvironmentStrings()  '便于兼容不同系统
    Dim WshShell As New WshShell
    Set WshShell = CreateObject("WScript.Shell")
    Debug.Print WshShell.ExpandEnvironmentStrings("%windir%")
    Debug.Print WshShell.ExpandEnvironmentStrings("%ProgramFiles%")
End Sub
'**************************************************************************************
Sub testLogEvent()    '写入事件查看器日志
    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")
    'WshShell.LogEvent intType, strMessage [,strTarget]
    '
    'intType Description
    '0 SUCCESS (类型:无 ID:0)
    '1 ERROR (类型:错误 ID:1)
    '2 WARNING (类型:警告 ID:2)
    '4 Information (类型:消息 ID:4)
    '8 AUDIT_SUCCESS (类型:成功审核 ID:8)
    '16 AUDIT_FAILURE (类型:失败审核 ID:8)
    WshShell.LogEvent 4, "abc"
End Sub
'**************************************************************************************
Sub testPopup()    '弹出消息窗口
    Dim WshShell As Object
    '新建记事本,单独保存以下两句为*.vbs,可看到效果
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Popup "2秒后自动关闭", 2, "提示"
End Sub
'**************************************************************************************
Sub testReg()    '读写注册表
    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")
    With WshShell
        .RegWrite "HKEY_CURRENT_USER\Software\a\b\c", "d"
        Debug.Print .RegRead("HKEY_CURRENT_USER\Software\a\b\c")
        .RegDelete "HKEY_CURRENT_USER\Software\a\b\c"
    End With
End Sub
'**************************************************************************************
Sub testRun()    '运行程序或文件
    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run "notepad C:\windows\win.ini", 3    '激活窗口并以最大化显示该窗口
End Sub
'**************************************************************************************
Sub testSendKeys()    '发送按键消息
    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.SendKeys "^{ESC}u"    '相当于点击开始 - 关闭计算机
End Sub
'**************************************************************************************
Sub testCurrentDirectory()    '返回当前目录路径
    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")
    MsgBox WshShell.CurrentDirectory
End Sub
'**************************************************************************************
Sub testEnvironment()    '环境变量
    Dim WshShell As Object, x
    Set WshShell = CreateObject("WScript.Shell")
    For Each x In WshShell.Environment
        Debug.Print x
    Next
End Sub
'**************************************************************************************
Sub testSpecialFolders()    '特殊文件夹
    Dim WshShell As Object, x
    Set WshShell = CreateObject("WScript.Shell")
    For Each x In WshShell.SpecialFolders
        Debug.Print x
    Next
End Sub







参考1:wscript.shell_百度百科 http://baike.baidu.com/view/4668098.htm
参考2:用vba怎么创建快捷方式 http://www.excelpx.com/thread-224344-1-1.html
参考3:http://www.devguru.com/technologies/WSH/home.asp
 楼主| 发表于 2012-6-6 10:16 | 显示全部楼层
本帖最后由 爱疯 于 2012-6-6 10:21 编辑

3#到5#,是转载的帮助。
点击 相关 下的链接,可访问出处。
回复

使用道具 举报

 楼主| 发表于 2012-6-6 10:17 | 显示全部楼层
本帖最后由 爱疯 于 2012-6-6 10:40 编辑

函数说明 RegRead
读取注册表指定的值。

RegRead ( "键名", "值项" )

参数
键名要读取的注册表的根键或其子键。
值项要读取的值项名。

返回值
成功:返回指定值项的数据。
失败:返回空字符串 "",并把 @error 设为以下值之一:
1 无法打开指定键
-1 无法打开指定值项
-2 不支持目标值项的数据类型

注意
键名必须以以下几种根键开头(也可用括号内的缩写):"HKEY_LOCAL_MACHINE" ("HKLM")、"HKEY_USERS" ("HKU")、"HKEY_CURRENT_USER" ("HKCU")、"HKEY_CLASSES_ROOT" ("HKCR") 或 "HKEY_CURRENT_CONFIG" ("HKCC")。

目前 AutoIt 支持的数据类型包括 REG_BINARY、REG_SZ、REG_MULTI_SZ、REG_EXPAND_SZ 以及 REG_DWORD。

如果要访问(默认)值项只需传递一个""(空字符串)到值项参数中即可。

若目标值项的数据类型是 REG_BINARY 则返回值将是一个十六进制的字符串。比如该值项的数据是 01,a9,ff,77 则返回的字符串将是”01A9FF77“。

若目标值项的数据类型是 REG_MULTI_SZ 则多重字符串项目将被 @LF 分割,使用 StringSplit(..., @LF) 即可获得各个项目的内容。

如果要访问网络注册表则参数格式应该是”\\计算机名\键名“。此功能要求您必须拥有相应的访问权限(NT/2000/XP/2003),如果操作系统是Win9x 则要求远程PC必须先安装远程注册表服务(详细说明请搜索 微软知识库中发布号为141460的文章)。


相关
RegDelete, RegWrite, StringSplit
示例

$var = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir")
MsgBox(4096, "Program files 文件夹位于:", $var)



回复

使用道具 举报

 楼主| 发表于 2012-6-6 10:18 | 显示全部楼层
本帖最后由 爱疯 于 2012-6-6 10:39 编辑

函数说明 RegWrite
创建一个主键、子键或值项。

RegWrite ( "键名" [,"值项", "类型", 数据] )

参数
键名目标键名。若其它参数未指定则只创建该子键。
值项[可选参数] 目标值项。
类型[可选参数] 目标值项的数据类型,比如:"REG_SZ"、"REG_MULTI_SZ"、"REG_EXPAND_SZ"、"REG_DWORD" 或 "REG_BINARY"。
数据[可选参数] 数值数据。

返回值
成功:返回值为1。
失败:返回0,说明在写入键值时出错。

注意
键名必须以以下几种根键开头(也可用括号内的缩写):"HKEY_LOCAL_MACHINE" ("HKLM")、"HKEY_USERS" ("HKU")、"HKEY_CURRENT_USER" ("HKCU")、"HKEY_CLASSES_ROOT" ("HKCR") 或 "HKEY_CURRENT_CONFIG" ("HKCC")。

目前 AutoIt 支持的数据类型包括 REG_BINARY、REG_SZ、REG_MULTI_SZ、REG_EXPAND_SZ 以及 REG_DWORD。

如果要访问(默认)值项只需传递一个""(空字符串)到值项参数中即可。

若要写入的目标值项的数据类型是 REG_BINARY 则应使用十六进制的字符串。比如该值项的数据是 01,a9,ff,77 则传递到参数中的字符串应该是”01A9FF77“。

若要写入的目标值项的数据类型是 REG_MULTI_SZ 则应该使用 @LF 分割各个字符串项目,该值项 不能 以 @LF 结尾,也允许写入“空项目”(请看下面的示例)。

如果要访问网络注册表则参数格式应该是”\\计算机名\键名“。此功能要求您必须拥有相应的访问权限(NT/2000/XP/2003),如果操作系统是Win9x 则要求远程PC必须先安装远程注册表服务(详细说明请搜索 微软知识库中发布号为141460的文章)。



相关
RegDelete, RegRead
示例

; 写入一个 REG_SZ 类型的数值
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey", "REG_SZ", "Hello this is a test")


; 写入一个 REG_MULTI_SZ 类型的数值,包括"line1" 和 "line2"
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey", "REG_MULTI_SZ", "line1" & @LF & "line2")

; 写入 REG_MULTI_SZ 类型值项的 错误示例
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey", "REG_MULTI_SZ", "line1" & @LF & "line2" & @LF) ;以 @LF 结尾
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey", "REG_MULTI_SZ", "line1" & @LF & @LF & "line2" & @LF) ;连续两个换行被认为是空项




回复

使用道具 举报

 楼主| 发表于 2012-6-6 10:18 | 显示全部楼层
本帖最后由 爱疯 于 2012-6-6 10:41 编辑

函数说明 RegDelete
从注册表中删除指定键值。

RegDelete ( "键名" [, "值项"] )

参数
键名要删除的注册表的根键或其子键。
值项[可选参数] 要删除的值项名。

返回值
成功:返回值为1。
特殊情况:返回0,说明目标键/值项并不存在。
失败:返回2,说明在删除目标键/值项时遇到错误。

注意
键名必须以以下几种根键开头(也可用括号内的缩写):"HKEY_LOCAL_MACHINE" ("HKLM")、"HKEY_USERS" ("HKU")、"HKEY_CURRENT_USER" ("HKCU")、"HKEY_CLASSES_ROOT" ("HKCR") 或 "HKEY_CURRENT_CONFIG" ("HKCC")。

如果要访问(默认)值项只需传递一个""(空字符串)到值项参数中即可。

删除注册表的数据具有潜在危险,请小心操作!

如果要访问网络注册表则参数格式应该是”\\计算机名\键名“。此功能要求您必须拥有相应的访问权限(NT/2000/XP/2003),如果操作系统是Win9x 则要求远程PC必须先安装远程注册表服务(详细说明请搜索 微软知识库中发布号为141460的文章)。


相关
RegRead, RegWrite
示例

RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey")



回复

使用道具 举报

发表于 2018-5-11 09:00 | 显示全部楼层
请问,能不能用你发的代码运行以下文件?.reg,我试了一下,是以记事本形式打开而不运行;谢谢老师Sub testRun()    '运行程序或文件    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run "notepad E:\康OA办公系统\系统文件.reg", 3    '激活窗口并以最大化显示该窗口
End Sub


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 10:12 , Processed in 0.305344 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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