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.