Да, это возможно. Например, Операционная система Linux предоставляет ptrace
системные вызовы, с помощью которых вы можете не только просматривать, но и изменять память трассировки. Из ptrace
[выделение добавлено]:
Системный вызов ptrace () предоставляет средство, с помощью которого один процесс («трассировщик») может наблюдают и контролируют выполнение другого процесса («след»), а проверяют и изменяют память и регистры следа . Он в основном используется для реализации отладки точек останова и трассировки системных вызовов.
BLOCKQUOTE>
Вы могли также использовать Environ$, но метод, указанный вопросом, лучше. Пользователи/Приложения могут изменить переменные среды.
Вы могли также сделать это:
Set WshNetwork = CreateObject("WScript.Network")
Print WshNetwork.UserName
Это также имеет свойство UserDomain и набор других вещей:
http://msdn.microsoft.com/en-us/library/907chf30 (По сравнению с 85) .aspx
Я обычно использую окружение из VBA как в следующем. У меня не было проблем, которые Ken упоминает как возможности.
Function UserNameWindows() As String
UserNameWindows = VBA.Environ("USERNAME") & "@" & VBA.Environ("USERDOMAIN")
End Function
Альтернативным способом сделать это - вероятно, API, который Вы упоминаете, является лучший способ получить имя пользователя.
For Each strComputer In arrComputers
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
For Each objItem in colItems
Wscript.Echo "UserName: " & objItem.UserName & " is logged in at computer " & strComputer
Next
Много альтернативных методов в других сообщениях, но отвечать на вопрос: да, который является лучшим способом сделать это. Быстрее, чем создание COM-объекта или WMI, если все Вы хотите, имя пользователя, и доступный во всех версиях Windows от Win95.