Es gibt hier einen (vielen bekannten) Sourcecode, mit dem man den gerade im Windows angemeldeten Benutzer auslesen kann.
Code: Alles auswählen
; coded by jpd, july 2012
EnableExplicit
#WTS_CURRENT_SERVER_HANDLE = 0
#WTS_CURRENT_SESSION = -1
Enumeration ;WTS_INFO_CLASS
  #WTSInitialProgram=0
  #WTSApplicationName
  #WTSWorkingDirectory
  #WTSOEMId
  #WTSSessionId
  #WTSUserName
  #WTSWinStationName
  #WTSDomainName
  #WTSConnectState
  #WTSClientBuildNumber
  #wtsclientname
  #WTSClientDirectory
  #WTSClientProductId
  #WTSClientHardwareId
  #WTSClientAddress
  #WTSClientDisplay
  #WTSClientProtocolType
EndEnumeration
Prototype WTSQuerySessionInformation(hServer.l,SessionId.l,WtsInfoClass.l,ppBuffer.l,pBytesReturned.l)
Global  WTSQuerySessionInformation.WTSQuerySessionInformation
Prototype WTSFreeMemory(lpBuffer.l)
Global  WTSFreeMemory.WTSFreeMemory
Procedure LoadWTSAPI()
  Protected Result
 
  Result = OpenLibrary(#PB_Any, "wtsapi32.dll")
  If Result
   
    WTSFreeMemory=GetFunction(Result, "WTSFreeMemory")
    CompilerIf #PB_Compiler_Unicode
      WTSQuerySessionInformation = GetFunction(Result, "WTSQuerySessionInformationW")
    CompilerElse
      WTSQuerySessionInformation = GetFunction(Result, "WTSQuerySessionInformationA")
    CompilerEndIf
   
    If WTSQuerySessionInformation = 0
      CloseLibrary(Result)
      Result = 0
    EndIf     
  EndIf
 
  ProcedureReturn Result
 
EndProcedure
Procedure.s CurrentSessionUserName(domain.b=#False)
 
  Protected pBytesReturnedaddress.l
  Protected UnameLength
  Protected Username.s
  Protected DomainName.s
  Protected libWTS
  Protected *username, *domainname
  Protected WTSQuery
  libWTS=LoadWTSAPI()
  If libWTS
   
    *username=AllocateMemory(256)
   
    WTSQuery= WTSQuerySessionInformation(#WTS_CURRENT_SERVER_HANDLE,#WTS_CURRENT_SESSION , #WTSUserName ,@*Username, @pBytesReturnedaddress)
    UnameLength=MemoryStringLength(*Username)
    Username=PeekS(*Username,UnameLength)
    WTSFreeMemory(*Username)
    If domain
      *domainname=AllocateMemory(256)
      WTSQuery= WTSQuerySessionInformation(#WTS_CURRENT_SERVER_HANDLE,#WTS_CURRENT_SESSION , #WTSDomainName,@*domainname, @pBytesReturnedaddress)
      UnameLength=MemoryStringLength(*domainname)
      DomainName=PeekS(*domainname,UnameLength)
      WTSFreeMemory(*domainname)
    EndIf
   
    CloseLibrary(libWTS)
  EndIf
 
  If Len(DomainName) > 0 And domain = #True
    ProcedureReturn DomainName+"\"+Username
  Else
    ProcedureReturn Username
  EndIf
 
EndProcedure
Debug CurrentSessionUserName()
Aber wie kann ich die Rechte des Users feststellen, um z.B. einem Admin spezielle Buttons in meinem Programm einzublenden,
oder dem einfachen User eine abgespeckte GUI zu präsentieren ?
In der WinAPI-Library habe ich natürlich schon gesucht aber wurde leider nicht fündig.







