【问题标题】:How to get or retrieve different users´ desktop folder than current user´s desktop folder with VBScript?如何使用 VBScript 获取或检索与当前用户桌面文件夹不同的用户桌面文件夹?
【发布时间】:2011-05-03 19:52:27
【问题描述】:

在 Windows 计算机上,有三个用户:AdministratorUserAUserB

当我以Administrator 登录时,如何分别检索UserA 的桌面文件夹和UserB 的路径?

我正在寻找可以在 Windows 7 和 Windows Server 2008 上运行的 VBScript。

我试过SpecialFolders("Desktop"),但这会返回Administrator的桌面文件夹路径,而不是UserA的桌面文件夹路径。

因此我想获得C:\Users\UserA\DesktopC:\Users\UserB\Desktop 的路径。

还在寻找一种方法来检索文件夹 Start Menu\ProgramsUserAUserB

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    为什么大家这么快就说这做不到呢?使用 WMI 很容易做到这一点。

    我已将脚本分成几部分,以便您了解我是如何执行每个步骤的。

    arrAccounts = Array("UserA", "UserB")
    
    For Each strUser in arrAccounts
        WScript.Echo GetUserDesktop(GetSID(strUser))
    Next
    
    Function GetUserDesktop(strSID)
        Const HKEY_USERS = &H80000003
    
        strComputer = "."
        Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
            & strComputer & "\root\default:StdRegProv")
        strKeyPath = strSID & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
        strValueName = "Desktop"
        objRegistry.GetStringValue HKEY_USERS, strKeyPath, strValueName, strValue
        GetUserDesktop = strValue
    End Function
    
    Function GetSID(strUser)
        strComputer = "."
        Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    
        ' Get the computer name (using WMI)
        For Each objComputer In objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
            strComputerName = objComputer.Name
            Exit For
        Next
    
        ' You could just as easily do this...
    '   strComputerName = CreateObject("WScript.Network").ComputerName
    
        Set objAccount = objWMIService.Get _
            ("Win32_UserAccount.Name='" & strUser & "',Domain='" & strComputerName & "'")
        GetSID = objAccount.SID
    End Function
    

    请注意,Microsoft 建议不要使用注册表来确定用户 shell 文件夹的位置。无法保证此方法在未来的 Windows 版本中会继续有效,但它确实适用于您打算针对的版本,那么为什么不使用它呢?

    【讨论】:

      【解决方案2】:

      (改编自my answer关于类似问题Getting special Folder path for a given user in Jscript。)

      这不能在纯 VBcript 和 Windows Script Host 中完成,除非没有外部实用程序。

      另一方面,如果您要使用支持 Windows API 调用的语言(例如 C# 或 C++),您将能够执行您的任务 a) 使用 SHGetKnownFolderPath 函数(或 SHGetFolderPath on Vista 之前的 Windows 版本),或 b) 通过从该用户的注册表配置单元读取路径。有关详细信息,请参阅以下问题:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 2013-07-21
        • 1970-01-01
        • 1970-01-01
        • 2021-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多