Форум: "Основная";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
ВнизКак определить имя пользователя в ХР Найти похожие ветки
← →
Necromancer (2005-01-21 17:19) [0]Как определить имя пользователя в ХР???
← →
Igor_thief (2005-01-21 17:27) [1]Посмотреть значение а реестре.
← →
qqqqq © (2005-01-21 17:30) [2]Идиоты, тупые сволочи!
← →
REA (2005-01-21 17:36) [3]GetUserName, GetUserNameEx
← →
Necromancer (2005-01-21 17:51) [4]var
user : PAnsiChar ;
void : cardinal;
begin
GetUserName(user,void);
-- здесь 2-ой параметр типа cardinal(я не знаю что это за тип) как правильно сделать???
end;
← →
begin...end © (2005-01-21 18:06) [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.
← →
rdm © (2005-01-22 19:48) [6]> Necromancer:
cardinal = 0..2^32-1var
b : cardinal; s : string[128];
begin
b := Length(s);
GetUserName(@s[1],b); SetLength(s,b);
end;
← →
Вариант © (2005-01-22 22:36) [7]
// Пример получения имени пользователя и домена под которым работает
// текущий поток или процесс
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 (лучше проверить на практике)
← →
Anatoly Podgoretsky © (2005-01-23 02:54) [8]У вас соревнование - кто длинне напишет?
← →
Defunct © (2005-01-23 04:54) [9]тут говорят чем длиннее тем дороже :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c