簡體   English   中英

使用WMI在VBA中獲取當前的Windows用戶名

[英]Use WMI to get current Windows username in VBA

我想知道是否有一種簡單的方法可以使用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

更新:查看已接受答案的評論

意識到這已經很老了,但是要處理多個excel實例,另一篇文章(在下面鏈接)闡明了如何使用以下方法獲取當前應用程序的進程ID:

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

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

如何通過VBA獲取當前Excel實例的進程ID,而不使用標題?

怎么樣

UserName = Environ("Username")
Domain = Environ("UserDomain")
Combined= Environ("UserDomain") & "\" & Environ("Username")

WQL中沒有TOP 1子句。 省略它,您的查詢應該可以工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM