一些有趣的VBS脚本
一些实用的VBS脚本
截取屏幕并将截图保存到剪贴板
With CreateObject("Word.Basic") .Sendkeys "{prtsc}" .FileQuit '.AppClose End With Msgbox "已将屏幕截取到剪贴板。", vbSystemModal+vbInformation, WScript.ScriptName
这段脚本使用 Visual Basic Scripting (VBS) 编写,目的是截取屏幕并将截图保存到剪贴板中。
具体解释如下:
-
CreateObject("Word.Basic")
:创建一个 Word.Basic 对象。Word.Basic 是 Microsoft Word 中的一个宏语言,可以通过该对象在代码中模拟键盘输入。 -
Sendkeys "{prtsc}"
:在 Word.Basic 对象中发送 "{prtsc}" 键的按键事件,该键是屏幕截图的快捷键。 -
FileQuit
:在 Word.Basic 对象中关闭 Word 应用程序。 -
Msgbox
:在屏幕上弹出一个消息框,显示“已将屏幕截取到剪贴板。”的文本内容,并以“WScript.ScriptName”为标题。
因此,这段脚本的作用是截取当前屏幕的截图,并将其保存到剪贴板中,同时弹出一个消息框提示操作成功。
获取 Windows 系统的开机、关机时间信息
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colLoggedEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent " _
& "Where Logfile = 'System' And EventCode = '6005' Or EventCode = '6006'")
For Each objEvent In colLoggedEvents
Flag = Flag + 1
If Flag = 1 Then
Wscript.Echo "本次开机时间: " & FormatWMIUTC(objEvent.TimeWritten)
ElseIf Flag = 2 Then
Wscript.Echo "上次关机时间: " & FormatWMIUTC(objEvent.TimeWritten)
ElseIf Flag = 3 Then
Wscript.Echo "上次开机时间: " & FormatWMIUTC(objEvent.TimeWritten)
Exit For
End If
Next
'FormatUTC
Function FormatWMIUTC(WMIDateString)
DS = " // :: "
FormatWMIUTC = Left(WMIDateString,2)
For i = 2 To 7
FormatWMIUTC = FormatWMIUTC & Mid(WMIDateString, i * 2 - 1, 2) & Mid(DS,i,1)
Next
'FormatWMIUTC = Mid(WMIDateString, 1, 4) & "年" _
' & Mid(WMIDateString, 5, 2) & "月" _
' & Mid(WMIDateString, 7, 2) & "日 " _
' & Mid (WMIDateString, 9, 2) & ":" _
' & Mid(WMIDateString, 11, 2) & ":" _
' & Mid(WMIDateString,13, 2)
End Function
这段脚本使用 VBScript 语言编写,目的是获取 Windows 系统的开机、关机时间信息。
具体解释如下:
strComputer = "."
:将计算机名称设置为本地计算机。Set objWMIService = GetObject("winmgmts:" _
:创建一个 WMI 服务对象,用于访问 Windows 管理信息。Set colLoggedEvents = objWMIService.ExecQuery _
:使用 WMI 查询语言执行一个 WMI 查询,并将结果保存在一个事件对象集合中。("Select * from Win32_NTLogEvent " _
:查询 Win32_NTLogEvent 类中的所有日志事件。& "Where Logfile = 'System' And EventCode = '6005' Or EventCode = '6006'")
:限制查询结果,只返回系统事件日志中的开机和关机事件。For Each objEvent In colLoggedEvents
:循环遍历查询结果集合中的每一个事件对象。Flag = Flag + 1
:用于记录事件对象的个数。If Flag = 1 Then
:判断当前事件对象是否为第一个事件对象(即本次开机事件)。Wscript.Echo "本次开机时间: " & FormatWMIUTC(objEvent.TimeWritten)
:将本次开机时间输出到控制台,并调用 FormatWMIUTC 函数将事件时间格式化。ElseIf Flag = 2 Then
:判断当前事件对象是否为第二个事件对象(即上次关机事件)。Wscript.Echo "上次关机时间: " & FormatWMIUTC(objEvent.TimeWritten)
:将上次关机时间输出到控制台,并调用 FormatWMIUTC 函数将事件时间格式化。ElseIf Flag = 3 Then
:判断当前事件对象是否为第三个事件对象(即上次开机事件)。Wscript.Echo "上次开机时间: " & FormatWMIUTC(objEvent.TimeWritten)
:将上次开机时间输出到控制台,并调用 FormatWMIUTC 函数将事件时间格式化。Exit For
:退出循环。Function FormatWMIUTC(WMIDateString)
:定义一个函数,用于将 WMI 时间格式转换为可读时间格式。DS = " // :: "
:定义一个分隔符,用于分隔年、月、日、时、分、秒。FormatWMIUTC = Left(WMIDateString,2)
:将时间字符串中的前两个字符(即年份)赋值给格式化时间字符串。For i = 2 To 7
:循环遍历时间字符串中的月、日、时、分、秒信息。FormatWMIUTC = FormatWMIUTC & Mid(WMIDateString, i * 2 - 1, 2) & Mid(DS,i,1)
:将每个时间信息和分隔符分别拼接到格式化时间字符串中。Next
:循环结束。End Function
:函数定义结束。
创建以当前日期命名的文件夹
Currentdate1=date()
CreateFolders "d:\Desket\" & Currentdate1
Function CreateFolders(path)
Set fso = CreateObject("scripting.filesystemobject")
CreateFolderEx fso,path
set fso = Nothing
End Function
Function CreateFolderEx(fso,path)
If fso.FolderExists(path) Then
Exit Function
End If
If Not fso.FolderExists(fso.GetParentFolderName(path)) Then
CreateFolderEx fso,fso.GetParentFolderName(path)
End If
fso.CreateFolder(path)
End Function
这段脚本的功能是创建一个以当前日期为名的文件夹(在指定路径下),如果该文件夹已经存在,则不进行任何操作。
具体地,脚本首先调用 date()
函数获取当前日期,并将其保存在 Currentdate1
变量中。然后调用 CreateFolders
函数来创建文件夹,传入的参数是指定路径和当前日期拼接而成的字符串。在 CreateFolders
函数中,首先创建一个 scripting.filesystemobject
对象,然后调用 CreateFolderEx
函数,该函数会递归地创建目录(如果它们不存在)。如果目录已经存在,则直接退出函数,否则递归创建目录。最后,关闭 scripting.filesystemobject
对象。
本文来自博客园,作者:Athenavi,转载请注明原文链接:https://www.cnblogs.com/Athenavi/p/17188827.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?