Avatar billede puppetmaster Nybegynder
05. maj 2004 - 12:28 Der er 15 kommentarer og
2 løsninger

Hvilken bruger er logget på netværket?

Kan man i VBA finde ud af hvilken bruger der er logget på, så jeg kan vise/skjule en knap afhængig deraf?
Avatar billede ferdinand.k Mester
05. maj 2004 - 12:29 #1
læg din mailadresse, så sender jeg et eksempel...
05. maj 2004 - 12:30 #2
vi andre vil også gerne se....
05. maj 2004 - 12:31 #3
ferdinand->jeg har forresten oprettet et spm til dig....lægger du ikke et svar i det?
Avatar billede ferdinand.k Mester
05. maj 2004 - 12:36 #4
værsgo thomas... sendt..
Avatar billede ferdinand.k Mester
05. maj 2004 - 12:43 #5
puppetmaster, jeg har sendt en mail til på TheNuttyProfessor osv... se om det er det du leder efter...
05. maj 2004 - 12:50 #6
puppetmaster mente du "logget på database" eller på netværket (som du skrev)?

Hvis det bare er på databasen (som jeg kan se, at ferdinand har forstået - tak for filen :), så kan du bruge denne kode:

Public Function ListUsers(Optional DatabaseSti As String) As Byte
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim intUser As Integer
    Dim fld As ADODB.Field
    Dim Brugernavne As String
     
    ' Brugerliste-schema informationerne kræver denne magiske kode.
    ' Hvorfor der ikke er foruddefineret en konstant til dette, er et mysterium
    Const adhcUsers = "{947bb102-5d43-11d1-bdbf-00c04fb92675}"
   
    Set cnn = New ADODB.Connection
    If DatabaseSti = "" Then
        Set cnn = CurrentProject.Connection
    Else
        cnn.Provider = "Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabaseSti & ";User ID=Admin;Password=;"
        cnn.Open
    End If
   
    Set rst = cnn.OpenSchema(adSchemaProviderSpecific, , adhcUsers)
   
    With rst
        Do Until .EOF
            intUser = intUser + 1
            Brugernavne = Brugernavne & "Bruger # " & intUser & vbNewLine
            For Each fld In .Fields
                If fld.Name = "COMPUTER_NAME" Or fld.Name = "LOGIN_NAME" Then
                    Brugernavne = Brugernavne & "  " & fld.Name & "=" & Trim(Replace(fld.Value, Chr(0), "")) & vbNewLine
                End If
            Next
            .MoveNext
        Loop
    End With
    ListUsers= intUser
    rst.Close
    Set rst = Nothing
    cnn.Close
    Set cnn = Nothing
    If intUser = 1 Then
        MsgBox "Der er ingen andre brugere på denne database!", vbExclamation, "Ingen brugere!"
    Else
        MsgBox Brugernavne, vbInformation, "Følgende " & intUser & " bruger(e) har databasen åben:"
    End If
End Function


Vejledning:
Indsæt funktionen i et modul.
Ønsker du at få listet brugere, som er logget på den aktuelle database, kaldes blot
ListUsers

Ønsker du at få listet brugere på en ekstern database, kaldes funktionen således:
ListUsers "X:\Databaser\XDatabase.mdb"
eller
Antal = ListUsers("X:\Databaser\XDatabase.mdb" )
Avatar billede puppetmaster Nybegynder
05. maj 2004 - 13:11 #7
Sikke en bunke!
Thomas, jeg HAR allerede "lånt" koden fra din hjemmeside, men jeg vil lægge en knap på hovedformularen, som kører ListUsers, men den skal KUN vises HVIS det er mig åbner programmet. Der skal checkes på hvilken bruger der er logget på netværket.
Havde engang et eksempel, noget med FSO........siger det dig/jer noget=
05. maj 2004 - 13:13 #8
Nå, du mener, at du vil vide, hvem DU er?
Kan du bruge:
Environ("Username")
Avatar billede puppetmaster Nybegynder
05. maj 2004 - 13:20 #9
Tja, Thomas, er det muligt at få domænenavnet med også?
Avatar billede puppetmaster Nybegynder
05. maj 2004 - 13:21 #10
(så det ikke er en anden med mine initialer, som er logget på fra et andet af vores AD domæner)
05. maj 2004 - 13:21 #11
hmm, så skal jeg lige have fat i mine "gemmer"...øjeblik
Avatar billede puppetmaster Nybegynder
05. maj 2004 - 13:23 #12
:)
(jeg VED det godt, I AM a bit "picky"! :) )
05. maj 2004 - 13:28 #13
ok, jeg fandt en, som jeg havde liggende fra Accessweb.
Den er lidt længere end den anden. er du klar?
05. maj 2004 - 13:28 #14
'************ Code Start *************
' This code was originally written by Dev Ashish.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' Dev Ashish
'
Private Type WKSTA_USER_INFO_1
  wkui1_username As Long    'name of the user _
                              currently logged on _
                              to the workstation.
  wkui1_logon_domain As Long 'the domain name of _
                              the user account of the _
                              user currently logged on
  wkui1_oth_domains As Long  'list of other LAN _
                              Manager domains browsed _
                              by the workstation.
  wkui1_logon_server As Long 'name of the computer _
                              that authenticated the _
                              server
End Type

Private Declare Function apiWkStationUser Lib "Netapi32" _
  Alias "NetWkstaUserGetInfo" _
  (ByVal reserved As Long, _
  ByVal Level As Long, _
  bufptr As Long) _
  As Long
 
Private Declare Function apiStrLenFromPtr Lib "kernel32" _
  Alias "lstrlenW" _
  (ByVal lpString As Long) _
  As Long

Private Declare Sub sapiCopyMemory Lib "kernel32" _
  Alias "RtlMoveMemory" _
  (hpvDest As Any, _
  hpvSource As Any, _
  ByVal cbCopy As Long)


Public Function fUserNTDomain() As String
'*******************************************
'Name:          fUserNTDomain  [NT ONLY] (Function)
'Purpose:      Find NT Domain name of current user
'Author:        Dev Ashish
'Date:          Thursday, January 14, 1999
'Called by:    Any
'Calls:        NetWkstaUserGetInfo, RTLMoveMemory
'Inputs:        None
'Returns:      NT Domain Name of Current User
'*******************************************
On Error GoTo ErrHandler
  Dim lngRet As Long
  Dim lngPtr As Long
  Dim tNTInfo As WKSTA_USER_INFO_1
 
  lngRet = apiWkStationUser(0&, 1&, lngPtr)
  If lngRet = 0 Then
    Call sapiCopyMemory(tNTInfo, ByVal lngPtr, LenB(tNTInfo))
    If Not lngPtr = 0 Then
      With tNTInfo
        fUserNTDomain = fStringFromPtr(.wkui1_logon_domain)
      End With
    End If
  End If

ExitHere:
  Exit Function
ErrHandler:
  fUserNTDomain = vbNullString
  Resume ExitHere
End Function

Private Function fStringFromPtr(lngPtr As Long) As String
Dim lngLen As Long
Dim abytStr() As Byte
  lngLen = apiStrLenFromPtr(lngPtr) * 2
  If lngLen > 0 Then
    ReDim abytStr(0 To lngLen - 1)
    Call sapiCopyMemory(abytStr(0), ByVal lngPtr, lngLen)
    fStringFromPtr = abytStr()
  End If
End Function
'************ Code End *************
05. maj 2004 - 13:28 #15
Spørg på fUserNTDomain
Avatar billede puppetmaster Nybegynder
05. maj 2004 - 13:36 #16
Takker mange gange, Thomas og ferdinand
05. maj 2004 - 14:04 #17
selv tak :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester