Вот процедура из одной из моих стандартных библиотек.Я думаю, что я включил все, что вам нужно.
Private Const VER_PLATFORM_WIN32_NT = 2
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 ' Maintenance string for PSS usage'
End Type
Public Enum EXTENDED_NAME_FORMAT
NameUnknown = 0
NameFullyQualifiedDN = 1
NameSamCompatible = 2
NameDisplay = 3
NameUniqueId = 6
NameCanonical = 7
NameUserPrincipal = 8
NameCanonicalEx = 9
NameServicePrincipal = 10
NameDnsDomain = 12
End Enum
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetUserNameEx Lib "Secur32.dll" Alias "GetUserNameExA" (ByVal NameFormat As EXTENDED_NAME_FORMAT, ByVal lpNameBuffer As String, ByRef lpnSize As Long) As Long
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Public Function UserName() As String
Dim sBuff As String * 260
Dim lBuffLen As Long
Dim Rtn As Long
Dim sReturn As String
On Error GoTo errUserName
lBuffLen = Len(sBuff)
sBuff = Space$(lBuffLen)
If IsWindows2kOrBetter = True Then
Rtn = GetUserNameEx(NameDisplay, sBuff, lBuffLen)
Else
Rtn = GetUserName(sBuff, lBuffLen)
End If
If Rtn <> 0 Then
sReturn = Left$(sBuff, lBuffLen - 1)
Else
sReturn = ""
End If
UserName = sReturn
Exit Function
errUserName:
UserName = ""
End Function
Public Function IsWindows2kOrBetter() As Boolean
Dim blnReturn As Boolean
Dim lngRst As Long
Dim oVerInfo As OSVERSIONINFO
oVerInfo.dwOSVersionInfoSize = Len(oVerInfo)
lngRst = GetVersionEx(oVerInfo)
If lngRst > 0 Then
If oVerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT And oVerInfo.dwMajorVersion >= 5 Then
blnReturn = True
Else
blnReturn = False
End If
Else
blnReturn = False
End If
IsWindows2kOrBetter = blnReturn
End Function