Используйте WMI для получения текущего имени пользователя Windows в VBA - PullRequest
1 голос
/ 13 ноября 2008

Мне было интересно, есть ли простой способ использовать WMI, чтобы получить текущее имя пользователя Windows с доменом. Вызов Windows API просто дает вам короткое имя пользователя, поэтому вы в конечном итоге делаете еще один вызов для имени домена. У меня есть код, но я получаю ошибку автоматизации. Есть идеи? Я думаю, что я на правильном пути, но я немного новичок в WMI.

Function GetFullName() As String
    Dim computer As String
    computer = "."
    Dim objWMIService, colProcessList As Object
    Set objWMIService = GetObject("winmgmts:\\" & computer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery _
        ("SELECT TOP 1 * FROM Win32_Process WHERE Name = 'EXCEL.EXE'")
    Dim uname, udomain As String
    Dim objProcess As Object
    For Each objProcess In colProcessList
        objProcess.GetOwner uname, udomain
    Next
    GetFullName = UCase(udomain) & "\" & UCase(uname)
End Function

ОБНОВЛЕНИЕ: см. Комментарии к принятому ответу

Ответы [ 3 ]

2 голосов
/ 14 ноября 2008

Как насчет

UserName = Environ("Username")
Domain = Environ("UserDomain")
Combined= Environ("UserDomain") & "\" & Environ("Username")
2 голосов
/ 19 апреля 2013

Поймите, что это старый, но для работы с несколькими экземплярами Excel, другой пост (ссылка ниже) объясняет, как получить идентификатор процесса текущего приложения с помощью:

Declare Function GetCurrentProcessId Lib "kernel32" () As Long
...
ProcessID = GetCurrentProcessId

Set ColProcessIDList = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_Process WHERE ProcessID = '" & ProcessID & "'")
...

Как получить идентификатор процесса текущего экземпляра Excel через VBA без заголовка?

1 голос
/ 13 ноября 2008

В WQL нет предложения TOP 1. Оставьте это, и ваш запрос должен работать:

"SELECT * FROM Win32_Process WHERE Name = 'EXCEL.EXE'"
...