Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить имя пользователя, зная имя пользователя 
V
    Опции темы
bems
  Дата 15.2.2006, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



GetUserName возвращает имя пользователя каким оно было создано. После переименования хотелось бы выводить новое имя


--------------------
Обижено школьников: 8
PM MAIL   Вверх
_hunter
Дата 15.2.2006, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



есть очень простой способ получить имя пользователя, зная имя пользователя. вот он:
userName := knownUserName;
( где knownUserName -- известное имя пользователя ( типы переменных -- string' и) )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 15.2.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Попробуй такой код:
Код
function GetUserNameEx(NameFormat: dword; lpBuffer: PChar; var nSize: DWORD): BOOL; stdcall; external 'Secur32.dll' name 'GetUserNameExA';

procedure TForm1.Button1Click(Sender: TObject);
var
  p: PChar;
  i: dword;
  w: dword;
begin
  w := 256;
  GetMem(p, w);
  if GetUserName(p, w) then
    Memo1.Lines.Add(p);
  for i := 1 to 12 do
    if GetUserNameEx(i, p, w) then
      Memo1.Lines.Add(IntToStr(i) + ': ' + p);
  FreeMem(p);
end;
Покажет все варианты имени. Какой подойдет - такой номер и выбирай.
Добавлено @ 12:15
Не могу оттестить - доменные юзеры не переименовываются, поэтому на тройку ничего у меня не возвращает.
P.S. Работает только под Win2k и выше.
PM MAIL   Вверх
bems
Дата 15.2.2006, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



добавил ветку else:
Код

else begin
     formatmessage(format_message_from_system,nil,getlasterror,0,p,w,nil);
     Memo1.Lines.Add(IntToStr(i) + ': ' + p)
     end;

и получил
Код

1: Именам пользователей не сопоставлены коды защиты данных.

2: BOSS\Bems
3: BOSS\Bems
4: Именам пользователей не сопоставлены коды защиты данных.

5: Именам пользователей не сопоставлены коды защиты данных.

6: Именам пользователей не сопоставлены коды защиты данных.

7: Именам пользователей не сопоставлены коды защиты данных.

8: Именам пользователей не сопоставлены коды защиты данных.

9: Именам пользователей не сопоставлены коды защиты данных.

10: Именам пользователей не сопоставлены коды защиты данных.

11: Именам пользователей не сопоставлены коды защиты данных.

12: Именам пользователей не сопоставлены коды защиты данных.



Bems - было до переименования smile

Это сообщение отредактировал(а) bems - 15.2.2006, 19:30


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Snowy
Дата 16.2.2006, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Тогда WMI. Класс Win32_UserAccount.
Только вот примера у меня нет.
Могу только дать пример на VB из MSDN:
Код

On Error Resume Next
strComputer = "."

Set objUserAccount = GetObject("winmgmts" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2:Win32_UserAccount.Domain='MyDomainName',Name='MyUserName' ")

If Err = 0 Then
    WScript.Echo objUserAccount.FullName
Else
    WScript.Echo "No object found" & Err.Number
End If

PM MAIL   Вверх
bems
Дата 16.2.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Списибо, я разберусь


--------------------
Обижено школьников: 8
PM MAIL   Вверх
bems
Дата 21.2.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Вот оно как:
Код

type USER_INFO_10=record
                  usri10_name,
                  usri10_comment,
                  usri10_usr_comment,
                  usri10_full_name:pwidechar
                  end;
pUSER_INFO_10=^USER_INFO_10;

function NetUserGetInfo(servername,username:pwidechar;level:dword;var bufptr:pUSER_INFO_10):dword;stdcall;external 'Netapi32.dll';
function NetApiBufferFree(Buffer:pointer):dword;stdcall;external 'Netapi32.dll';

procedure TForm1.FormDblClick(Sender: TObject);
var uinfo:pUSER_INFO_10;b:pwidechar;s:dword;
begin
s:=255;
GetMem(b,s);
GetUserNameW(b,s);
if (NetUserGetInfo(nil,b,10,uinfo)=0) then
   begin
   if uinfo.usri10_full_name^=#0000 then messageboxw(0,uinfo.usri10_name,b,0)
                                    else messageboxw(0,uinfo.usri10_full_name,b,0);
   NetApiBufferFree(uinfo);
   end;
FreeMem(b,s);
end;



--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.3210 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.