Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить имя пользователя в ХР [D7]


Necromancer ©   (2005-01-21 17:19:00) 

Как определить имя пользователя  в ХР???


Defunct   (2005-01-23 04:54:00) [1]

тут говорят чем длиннее тем дороже :)


Anatoly Podgoretsky   (2005-01-23 02:54:00) [2]

У вас соревнование - кто длинне напишет?


Вариант   (2005-01-22 22:36:00) [3]

// Пример получения имени пользователя и домена под которым работает
// текущий поток или процесс
type
PTOKEN_USER = ^TOKEN_USER;
_TOKEN_USER = record
  User : TSidAndAttributes;
end;
TOKEN_USER = _TOKEN_USER;

function GetCurrentUserAndDomain (
     szUser : PChar; var chUser: DWORD; szDomain :PChar; var chDomain : DWORD
):Boolean;
var
hToken : THandle;
cbBuf  : Cardinal;
ptiUser : PTOKEN_USER;
snu    : SID_NAME_USE;
begin
Result:=false;
// Получаем маркер доступа текущего потока нашего процесса
if not OpenThreadToken(GetCurrentThread(),TOKEN_QUERY,true,hToken)
 then begin
  if GetLastError()< > ERROR_NO_TOKEN then exit;
  // В случее ошибки - получаем маркер доступа нашего процесса.
  if not OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,hToken)
   then exit;
 end;

// Вывываем GetTokenInformation для получения размера буфера
if not GetTokenInformation(hToken, TokenUser, nil, 0, cbBuf)
 then if GetLastError()< > ERROR_INSUFFICIENT_BUFFER
  then begin
   CloseHandle(hToken);
   exit;
  end;

if cbBuf = 0 then exit;

// Выделяем память под буфер
GetMem(ptiUser,cbBuf);

// В случае удачного вызова получим указатель на TOKEN_USER
if GetTokenInformation(hToken,TokenUser,ptiUser,cbBuf,cbBuf)
 then begin
  // Ищем имя пользователя и его домен по его SID
  if LookupAccountSid(nil,ptiUser.User.Sid,szUser,chUser,szDomain,chDomain,snu)
   then Result:=true;
 end;

// Освобождаем ресурсы
CloseHandle(hToken);
FreeMem(ptiUser);
end;

// Использовать функцию можно так :
var
Domain, User : array [0..50] of Char;
chDomain,chUser : Cardinal;
begin
chDomain:=50;
chUser :=50;
if GetCurrentUserAndDomain(User,chuser,Domain,chDomain)
 then ...
end;

// Если вам необходимо получить только имя пользователя - используйте GetUserName
// Данный пример можно использовать и для определения - запущен ли процесс
// системой или пользователем.  Учетной записи Localsystem соответствует
// имя пользователя - SYSTEM и домен NT AUTORITY (лучше проверить на практике)


rdm   (2005-01-22 19:48:00) [4]

> Necromancer:
cardinal = 0..2^32-1

var
 b : cardinal; s : string[128];
begin
 b := Length(s);
 GetUserName(@s[1],b); SetLength(s,b);
end;


begin...end   (2005-01-21 18:06:00) [5]

> [2] qqqqq ©   (21.01.05 17:30)

Это Вы о ком?

> [4] Necromancer   (21.01.05 17:51)

function GetUserNameString: String;
var
 UserName: PAnsiChar;
 Size: Cardinal;
begin
 Size := MAX_COMPUTERNAME_LENGTH + 1; // Не уверен
 GetMem(UserName, Size);
 try
   if GetUserName(UserName, Size) then
     Result := UserName
 finally
   FreeMem(UserName)
 end
end.


Necromancer   (2005-01-21 17:51:00) [6]

var
user : PAnsiChar ;
void : cardinal;
begin
GetUserName(user,void);
-- здесь 2-ой параметр типа cardinal(я не знаю что это за тип) как правильно сделать???
end;


REA   (2005-01-21 17:36:00) [7]

GetUserName, GetUserNameEx


qqqqq   (2005-01-21 17:30:00) [8]

Идиоты, тупые сволочи!


Igor_thief   (2005-01-21 17:27:00) [9]

Посмотреть значение а реестре.


Наверх

Титульная страница Поиск, карта сайта Написать письмо