记录在运行对话框中的一系列命令

最开始有这个想法是因为有一段时间IE常出问题,而需在运行框里输入的重装命令恐怕比女性的丝袜短不到哪里去···。但是每次重启之后,下拉列表里的命令总是不翼而飞。

      我们非常清楚地知道,最近使用的命令(如果您统计过的话,是最近使用过的 26 个)缓存在计算机上的某个地方。更确切地说,它作为单个注册表值存储在注册表项 HKCU/Software/Microsoft/Windows/CurrentVersion/Explorer/RunMRU 中。事实证明,在“运行”对话框中键入的每个命令在注册表中都有其对应值;通过使用字母 A 到 Z 为这些值分配了名称(这也就解释了为何在注册表中只有 26 个最近使用的命令被跟踪的原因)。在注册表中,RunMRU 如下图所示:

您好,脚本专家!

 

      事实上在这里脚本专家已经告诉我们如何编写脚本来读取这一系列值。我所需要做的只是简单的将每次读取的一系列值写入一个文本文件。我这里做的非常简单,实际上你自己还可以做的更复杂些,以便达到你的目的,比如监视某个用户在哪个时间使用了哪些命令。

On Error Resume Next

Const HKEY_CURRENT_USER = &H80000001
Const ForReading = 1
Const ForWriting = 2
Const FileHeader = "RunCmdList:"

strComputer = "."

Set objRegistry = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv")

strKeyPath = "Software/Microsoft/Windows/CurrentVersion/Explorer/RunMRU"
objRegistry.EnumValues HKEY_CURRENT_USER, strKeyPath, arrValueNames, arrValueTypes

Set objFSO = CreateObject("Scripting.FileSystemObject")

If NOT objFSO.FileExists("c:/RunCmdList.txt") then
    Set objFile = objFSO.OpenTextFile("c:/RunCmdList.txt", ForWriting, True)
   
    objFile.Write FileHeader
    objFile.Close
End If

Set objFile = objFSO.OpenTextFile("c:/RunCmdList.txt", ForReading)

strFile = objFile.ReadAll

objFile.Close

arrLines = Split(strFile, vbCrLf)

For Each strValue in arrValueNames
    If Len(strValue) = 1 Then
        IsE = True
        objRegistry.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValue,strRunCommand
        intLength = Len(strRunCommand)
        strRunCommand = Left(strRunCommand, intLength - 2)
        For Each strLine in arrLines
            If strRunCommand = strLine Then
                IsE = False        
            End If
        Next
        If Ise Then
            strFile = strFile & vbCrLf & strRunCommand
        End If
    End If  
Next

Set objFile = objFSO.OpenTextFile("c:/RunCmdList.txt", ForWriting)

objFile.Write strFile
objFile.Close

      上面的脚本只是将读取得值存入C:/RunCmdList.txt中,并且里面不会出现重复的行。对于一些很复杂的命令(你很容易忘记用途的),你可以在该命令上或下另起一行注释,不会影响运行。

 

      其实我刚开始还想将其加入注销和关机脚本,以便我们每次关机或注销时它自动记录,而无需我们手动运行一次。而实际上结果并不如意,更甚的是,脚本什么都没读到,我猜想可能是因为在脚本运行前,系统已经将注册表相关值删除了。除了这个方法,我们还可以添加几行代码使脚本每隔一段时间运行一次,不过为此消耗系统资源是否值得,就看个人需要了 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值