Necesito el usuario actual y el dominio. Estoy usando una aplicación VB 6.Usando VB6, ¿cómo obtengo el usuario y dominio actual en Windows XP?
Gracias
Necesito el usuario actual y el dominio. Estoy usando una aplicación VB 6.Usando VB6, ¿cómo obtengo el usuario y dominio actual en Windows XP?
Gracias
Una forma sería pedir el medio ambiente:
Dim UserName As String
Dim UserDomain As String
UserName = Environ("USERNAME")
UserDomain = Environ("USERDOMAIN")
¿Qué hay de esto (funciona en Windows NT y representan sólo, obviamente.)?
Private Function IsAdmin() As Boolean
Dim groups As Object
Dim user As Object
Set groups = GetObject("WinNT://./administrators")
For Each user In groups.members
If UCase(Environ("USERNAME")) = UCase(user.Name) Then
IsAdmin = True
End If
Next user
End Function
No puedo recomendar el uso de esta implementación incluso con el propósito de determinar si el usuario tiene derechos administrativos. En primer lugar, no se establece el valor de retorno predeterminado, a pesar de que es False implícitamente. En segundo lugar, debe salir del bucle For una vez que coincidan los nombres. –
el código puede ser menos que ideal pero responde la pregunta a saber Environ ("NOMBRE DE USUARIO") – MikeT
Básicamente debe realizar llamadas a la API de Windows. Buscando en vbnet.mvps.org Recibo las siguientes respuestas.
y la API-version:
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Declare Function LookupAccountName Lib "advapi32.dll" Alias "LookupAccountNameA" (lpSystemName As String, ByVal lpAccountName As String, sid As Any, cbSid As Long, ByVal ReferencedDomainName As String, cbReferencedDomainName As Long, peUse As Long) As Long
Private Sub Form_Load()
Dim sDomainName As String * 255
Dim lDomainNameLength As Long
Dim sUserName as String
Dim bUserSid(255) As Byte
Dim lSIDType As Long
Rem Create a buffer
sUserName = String(100, Chr$(0))
Rem Get the username
GetUserName sUserName, 100
Rem strip the rest of the buffer
sUserName = Left$(sUserName, InStr(sUserName, Chr$(0)) - 1)
rem Show the temppath and the username
MsgBox "Hello " + strUserName
lResult = LookupAccountName(vbNullString, sUserName, bUserSid(0), 255, sDomainName, lDomainNameLength, _
lSIDType)
if lResult <>0 then
msgbox sDomainName
end if
end sub
Utilice los siguientes métodos del objeto WshNetwork, que está disponible después de hacer referencia a la Modelo de objetos de Windows Script Host en su proyecto:
Dim Network As WshNetwork
Set Network = New WshNetwork
Debug.Print "ComputerName: " & Network.ComputerName
Debug.Print "UserDomain: " & Network.UserDomain
Debug.Print "UserName: " & Network.UserName
Eché los resultados a mayúscula o minúscula para mayor coherencia, pero esos son los métodos que necesita.
Tenga en cuenta que cuando se ejecuta en una máquina que no ha iniciado sesión en un dominio, ComputerName y UserDomain devuelven lo mismo: el nombre de la computadora.
Esto no es seguro si necesita hacer comprobaciones basadas en el usuario actual. Basta con modificar las variables de entorno (use 'SET USERNAME = pwned' en el símbolo del sistema y ejecute la aplicación desde ese indicador). – Fulvio
La palabra "inseguro" implica que es un riesgo de seguridad. Eso no es en absoluto el caso. Por supuesto, se puede escribir todo el entorno de un proceso, pero ese es generalmente el caso, y sin embargo, todo tipo de aplicaciones leen su material del entorno. Si alguien basa las tareas que necesitan una autorización adecuada en valores que han leído del entorno, es enteramente su culpa. – Tomalak
Quería agregar información adicional al comentario anterior, pero SO me bloqueó ayer por cualquier razón. Mi punto fue subrayar que la versión API publicada por Stefan es un poco mejor desde el punto de vista de la seguridad, dado que el nombre de usuario se proporciona mediante la API de Win32 y no se puede modificar tan fácilmente como la variable env USERNAME/USERDOMAIN. – Fulvio