![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ПОМОГИТЕ!!!! [D7, WinXP]
medvedenator © (2006-01-17 11:08:00)Кто знает, как в делфи узнать имя текущего пользователя, но не через функцию GetUserName????
han_malign (2006-01-17 11:25:00) [1]LsaEnumerateLogonSessions
LogonType - Interactive,RemoteInteractive,CachedInteractive
или по процессам
function GetUserNameFromService(hProcess : THandle; var DomainName : string): string;
var
Token: THandle;
User: PSIDAndAttributes;
dwSize, dwNameSize,
dwDomainSize, dwUse: DWORD;
begin
Result := '';
if hProcess <> 0 then begin
if OpenProcessToken(hProcess, TOKEN_QUERY, Token) then begin
User := nil; dwSize := 0;
if not GetTokenInformation(Token, TokenUser, User,
dwSize, dwSize) and (GetLastError = ERROR_INSUFFICIENT_BUFFER)
then begin
GetMem(User, dwSize);
if GetTokenInformation(Token, TokenUser, User,dwSize, dwSize) then begin
dwNameSize := 0;
dwDomainSize := 0;
if not LookupAccountSid(nil, User.Sid, nil, dwNameSize, nil, dwDomainSize, dwUse) and
(GetLastError = ERROR_INSUFFICIENT_BUFFER)
then begin
SetLength(Result, dwNameSize);
SetLength(DomainName, dwDomainSize);
if not LookupAccountSid(nil, User.Sid, pointer(Result), dwNameSize, pointer(DomainName), dwDomainSize, dwUse)
then begin
Result:='';
DomainName:='';
end;
end;
end;
FreeMem(User);
end;
CloseHandle(Token);
end;
end;
end;
а "текущих" сеансов Windows может быть много, особенно в сети
TUser (2006-01-17 11:22:00) [2]GetUserName
medvedenator (2006-01-17 11:12:00) [3]Имя пользователя текущего сеанса WINDOWS
Ega23 (2006-01-17 11:09:00) [4]Текущего пользователя чего?