Проблема здесь в том, что Microsoft не предоставила метод API для этого напрямую.Возможно, это был недосмотр.При этом любое решение, которое вы найдете, будет своего рода обходным путем и будет представлять какие-то ограничения.
Использование реестра для получения этой информации официально не поддерживается Microsoft и, следовательно, не можетработа идет вперед.
Итерация по папкам профиля пользователя ненадежна, поскольку папка не всегда именуется по имени пользователя и потому что вы можете изменить ее местоположение.
И т. д.
При всём этом я использую комбинацию WMI и реестра для этого.Вот как это выглядит в VBScript, вы должны иметь возможность адаптировать его к вашим потребностям.
' Create some arrays to hold the data.
arrUsers = Array()
arrSIDs = Array()
arrAppDataFolders = Array()
' Get a list of all the non-system users with their SID
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2"
Set colUsers = objWMIService.ExecQuery _
("Select * from Win32_UserAccount Where Status = 'OK'")
i = 0
For Each objUser in colUsers
ReDim Preserve arrUsers(i)
ReDim Preserve arrSIDs(i)
arrUsers(i) = objUser.Name
arrSIDs(i) = objUser.SID
i = i + 1
Next
Set colUsers = Nothing
Set objWMIService = Nothing
' Now go to the registry and get the Document folder location using the SID
Const HKEY_USERS = &H80000003
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\default:StdRegProv")
ReDim arrAppDataFolders(UBound(arrSIDs))
For i = 0 to UBound(arrSIDs)
strKeyPath = arrSIDs(i) & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
strValueName = "AppData" ' or "Local AppData"
intReturn = objRegistry.GetExpandedStringValue HKEY_USERS, strKeyPath, strValueName, strValue
If (intReturn = 0) And (Err.Number = 0) Then
arrAppDataFolders(i) = strValue
Else
arrAppDataFolders(i) = vbNull
End If
Next
Set objRegistry = Nothing