![]() |
Delphi-Version: 5
Wie findet man den richtigen angemeldeten Windows Benutzer
Hallo zusammen,
ich hab verschiedenes ausprobiert, kann aber den Benutzernamen nicht finden in dessen Windows Profil ich angemeldet bin.
Delphi-Quellcode:
Diese Funktion gibt mir den Benutzernamen von jenem der das Programm ausführt, aber nicht unbedingt jener bei dem ich angemeldet bin: Wenn ich meine App as "Run as Admin" starte, bekomme ich immer den Namen vom Admin zurück.
function UserName: String;
var User: PChar; i: DWord; begin i := 1024; user := StrAlloc(Succ(i)); if GetUserName(User, i) then Result := StrPas(User) else Result := 'unknown'; end; Wie kann ich den laufenden Benutzernamen finden ? Danke |
AW: Wie findet man den richtigen angemeldeten Windows Benutzer
Was ist der "laufende" Benutzername?
Der in dessen Kontext das Programm ausgeführt wird? Der, der vor dem Monitor sitzt oder der, der per RemoteSession angemeldet sind? |
AW: Wie findet man den richtigen angemeldeten Windows Benutzer
Der bei dem ich bei Windows Angemeldet bin, der der im Startmenu steht, wenn ich unten links auf das Windows zeichen klicke. ;-)
Bei Windows heißt es bei GetUserName: "If the current thread is impersonating another client, the GetUserName function returns the user name of the client that the thread is impersonating." |
AW: Wie findet man den richtigen angemeldeten Windows Benutzer
Versuch mal
![]() Hatte ich damals in folgender Form verwendet, um den aktiven Benutzer aus einem Service heraus abzufragen:
Delphi-Quellcode:
Edit:
class function TServiceHelper.QueryActiveSessionId: DWord;
var WTSGetActiveConsoleSessionId: function: DWord; stdcall; begin Result := 0; @WTSGetActiveConsoleSessionId := GetProcAddress(LoadLibrary('kernel32.dll'), 'WTSGetActiveConsoleSessionId'); if Assigned(@WTSGetActiveConsoleSessionId) then begin Result := WTSGetActiveConsoleSessionId; end; end; Achso ganz vergessen ... danach brauchst du natürlich noch ![]() |
AW: Wie findet man den richtigen angemeldeten Windows Benutzer
In der Richtung hab ich schon gesucht, konnte aber keine Beispiele zur WTSQuerySessionInformation finden.
Ich probier das mal aus ;-) |
AW: Wie findet man den richtigen angemeldeten Windows Benutzer
Ich sehe grade, dass es für die aktuelle Sitzung sogar Konstanten gibt. Folgender Aufruf sollte für dich funktionieren:
Delphi-Quellcode:
function WTSQuerySessionInformationW(hServer: THandle; SessionId: DWord; WTSInfoClass: DWord;
var ppBuffer: LPTSTR; var BytesReturned: DWord): BOOL; stdcall; external 'Wtsapi32.dll'; procedure WTSFreeMemory(pMemory: Pointer); stdcall; external 'Wtsapi32.dll'; procedure Test; const WTS_CURRENT_SERVER_HANDLE = 0; WTS_CURRENT_SESSION = DWord(-1); const WTSUserName = 5; var Buffer: LPTSTR; BytesReturned: DWord; begin if WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, Buffer, BytesReturned) then try ShowMessage(Buffer); finally WTSFreeMemory(Buffer); end; end; |
AW: Wie findet man den richtigen angemeldeten Windows Benutzer
Zitat:
PS: Wenn man eine Resource anfordert, dann hat man diese gefälligst auch wieder freizugeben! LoadLibrary -> FreeLibrary Aber da man davon ausgehen kann, dass diese DLL (kernel32) immer geladen ist, kann man auch einfach ![]() |
AW: Wie findet man den richtigen angemeldeten Windows Benutzer
Und wozu muss das ein Programm wissen?
|
AW: Wie findet man den richtigen angemeldeten Windows Benutzer
Super, dass klappt alles wie es soll. Danke an euch
|
AW: Wie findet man den richtigen angemeldeten Windows Benutzer
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz