• 一些有趣的VBS脚本


    一些实用的VBS脚本

    截取屏幕并将截图保存到剪贴板

    With CreateObject("Word.Basic")
     .Sendkeys "{prtsc}"
     .FileQuit '.AppClose
    End With
    
    Msgbox "已将屏幕截取到剪贴板。", vbSystemModal+vbInformation, WScript.ScriptName
    

    这段脚本使用 Visual Basic Scripting (VBS) 编写,目的是截取屏幕并将截图保存到剪贴板中。

    具体解释如下:

    1. CreateObject("Word.Basic"):创建一个 Word.Basic 对象。Word.Basic 是 Microsoft Word 中的一个宏语言,可以通过该对象在代码中模拟键盘输入。

    2. Sendkeys "{prtsc}":在 Word.Basic 对象中发送 "{prtsc}" 键的按键事件,该键是屏幕截图的快捷键。

    3. FileQuit:在 Word.Basic 对象中关闭 Word 应用程序。

    4. 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 系统的开机、关机时间信息。

    具体解释如下:

    1. strComputer = ".":将计算机名称设置为本地计算机。
    2. Set objWMIService = GetObject("winmgmts:" _:创建一个 WMI 服务对象,用于访问 Windows 管理信息。
    3. Set colLoggedEvents = objWMIService.ExecQuery _:使用 WMI 查询语言执行一个 WMI 查询,并将结果保存在一个事件对象集合中。
    4. ("Select * from Win32_NTLogEvent " _:查询 Win32_NTLogEvent 类中的所有日志事件。
    5. & "Where Logfile = 'System' And EventCode = '6005' Or EventCode = '6006'"):限制查询结果,只返回系统事件日志中的开机和关机事件。
    6. For Each objEvent In colLoggedEvents:循环遍历查询结果集合中的每一个事件对象。
    7. Flag = Flag + 1:用于记录事件对象的个数。
    8. If Flag = 1 Then:判断当前事件对象是否为第一个事件对象(即本次开机事件)。
    9. Wscript.Echo "本次开机时间: " & FormatWMIUTC(objEvent.TimeWritten):将本次开机时间输出到控制台,并调用 FormatWMIUTC 函数将事件时间格式化。
    10. ElseIf Flag = 2 Then:判断当前事件对象是否为第二个事件对象(即上次关机事件)。
    11. Wscript.Echo "上次关机时间: " & FormatWMIUTC(objEvent.TimeWritten):将上次关机时间输出到控制台,并调用 FormatWMIUTC 函数将事件时间格式化。
    12. ElseIf Flag = 3 Then:判断当前事件对象是否为第三个事件对象(即上次开机事件)。
    13. Wscript.Echo "上次开机时间: " & FormatWMIUTC(objEvent.TimeWritten):将上次开机时间输出到控制台,并调用 FormatWMIUTC 函数将事件时间格式化。
    14. Exit For:退出循环。
    15. Function FormatWMIUTC(WMIDateString):定义一个函数,用于将 WMI 时间格式转换为可读时间格式。
    16. DS = " // :: ":定义一个分隔符,用于分隔年、月、日、时、分、秒。
    17. FormatWMIUTC = Left(WMIDateString,2):将时间字符串中的前两个字符(即年份)赋值给格式化时间字符串。
    18. For i = 2 To 7:循环遍历时间字符串中的月、日、时、分、秒信息。
    19. FormatWMIUTC = FormatWMIUTC & Mid(WMIDateString, i * 2 - 1, 2) & Mid(DS,i,1):将每个时间信息和分隔符分别拼接到格式化时间字符串中。
    20. Next:循环结束。
    21. 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 对象。


    __EOF__

  • 本文作者: Athenavi
  • 本文链接: https://www.cnblogs.com/Athenavi/p/17188827.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    【正点原子STM32探索者】CubeMX+Keil开发环境搭建
    【springboot】19、数据库操作
    【原创】C++中vector与remove()函数
    含文档+PPT+源码等]精品基于SpringCloud实现的高并发购物商城系统-微服务毕业设计项目源码-分布式毕设项目[包运行成功]
    [Zer0pts2020]Can you guess it? basename特性 和preg_match 绕过
    反色(顺序)C C++
    Android_JNI编程入门
    cocos2d-x引擎基础使用(1)--整体架构
    ZZULIOJ:1160: 矩阵的最大值(指针专题)
    Windows XP的特点和运行环境分别是什么
  • 原文地址:https://www.cnblogs.com/Athenavi/p/17188827.html