| Modules |
| 5.6 Funzioni per rilevare il sistema operativo, l'utente corrente e il dominio (solo WinNT/2000). |
| Pepin |
|
Queste funzioni rilevano il sistema operativo, l'utente corrente e il dominio (solo WinNT/2000). La funzione RilevaData() mostra come utilizzare le funzioni Utente e OsVer.
Option Compare Database
Option Explicit
'Dati sistema operativo
Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
'Dati utente (WinNT/2000)
Type WKSTA_USER_INFO_1
wkui1_username As Long
wkui1_logon_domain As Long
wkui1_logon_server As Long
wkui1_oth_domains As Long
End Type
'Rileva la versione del sistema operativo e memorizza i dati in OSVERSIONINFO
Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
(LpVersionInformation As OSVERSIONINFO) As Long
'rileva l'utente corrente (Win9x)
Declare Function WNetGetUser& Lib "Mpr" Alias "WNetGetUserA" _
(lpName As Any, ByVal lpUserName$, lpnLength&)
'rileva le informazioni di logon correnti e le memorizza in WKSTA_USER_INFO_1
Declare Function NetWkstaUserGetInfo& Lib "Netapi32" _
(reserved As Any, ByVal lLevel&, pbBuffer As Any) 'rileva i dati
'funzioni per il trattamento dei dati restituiti dalle altre funzioni
Declare Sub lstrcpyW Lib "kernel32" (dest As Any, ByVal Src As Any)
Declare Sub RtlMoveMemory Lib "kernel32" _
(dest As Any, Src As Any, ByVal size&)
Declare Function NetApiBufferFree& Lib "Netapi32" (ByVal buffer&)
Function Utente(ByVal OS As Long, Optional ByVal bDomain As Boolean = False) As String
'lOS: versione del sistema operativo (1 per Win9x/ME; 2 per WinNT/2000)
'bDomain: restituisce anche il dominio (solo per WinNT)
Dim ret As Long, buffer(512) As Byte, i As Integer
Dim pwk101 As Long
Dim wk1 As WKSTA_USER_INFO_1
Dim pwk1 As Long
Dim cbusername As Long
Dim UserName As String
Dim computername As String, langroup As String, logondomain As String
If OS = 1 Then
UserName = Space$(256)
ret = WNetGetUser(Null, UserName, Len(UserName))
If ret = 0 Then
UserName = Left(UserName, InStr(1, UserName, Chr(0)) - 1)
Else
UserName = "0"
End If
End If
If OS = 2 Then
ret = NetWkstaUserGetInfo(ByVal 0&, 1, pwk1)
If ret = 0 Then
RtlMoveMemory wk1, ByVal pwk1, Len(wk1)
lstrcpyW buffer(0), wk1.wkui1_logon_domain
If bDomain Then
i = 0
Do While buffer(i) <> 0
UserName = UserName & Chr(buffer(i))
i = i + 2
Loop
UserName = UserName & "\"
End If
lstrcpyW buffer(0), wk1.wkui1_username
i = 0
Do While buffer(i) <> 0
UserName = UserName & Chr(buffer(i))
i = i + 2
Loop
ret = NetApiBufferFree(pwk1)
Else
UserName = "0"
End If
End If
Utente = LCase(UserName)
End Function
Public Function OsVer(Optional ByRef sVersion As String = "") As Long
'Rileva la versione del sistema operativo
'Se passata, nella variabile sVersion viene memorizzata la stringa
corrispondente al S.O.
'Restituisce 0 se Win32s (Win3.xx)
' 1 se Win9x/ME
' 2 se WinNT/2000
Dim VerInfo As OSVERSIONINFO
Dim ver_major, ver_minor, build As String
Dim ret As Long
VerInfo.dwOSVersionInfoSize = Len(VerInfo)
ret = GetVersionEx(VerInfo)
If ret = 0 Then
MsgBox "Error Getting Version Information"
Else
Select Case VerInfo.dwPlatformId
Case 0: sVersion = sVersion + "Windows 32s "
Case 1: sVersion = sVersion + "Windows 95 "
Case 2: sVersion = sVersion + "Windows NT "
End Select
sVersion = sVersion & VerInfo.dwMajorVersion & "." &
VerInfo.dwMinorVersion & " (Build " & VerInfo.dwBuildNumber & ")"
OsVer = VerInfo.dwPlatformId
End If
End Function
Public Function RilevaDati()
Dim nVersioneSO As Long 'versione S.O. (numerico)
Dim sVersioneSO As String 'versione S.O. (stringa)
Dim sUtente As String 'utente corrente
Dim sDominioeUtente As String 'dominio e utente correnti
nVersioneSO = OsVer(sVersioneSO)
sUtente = Utente(nVersioneSO)
sDominioeUtente = Utente(nVersioneSO, True)
MsgBox "Versione S.O. (numerico): " & nVersioneSO & vbCrLf & _
"Versione S.O. (stringa): " & sVersioneSO & vbCrLf & _
"Utente corrente: " & sUtente & vbCrLf & _
"Dominio e utente correnti: " & sDominioeUtente, , "Rilevazione dati utente - by Pepin"
End Function
|