繁体   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