Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2007, 18:29   #1
UnD)eaD)Snake
Форумчанин Подтвердите свой е-майл
 
Аватар для UnD)eaD)Snake
 
Регистрация: 07.07.2007
Сообщений: 241
Вопрос Как вытащить из XP список пользователей

Как можно узнать имена всех пользователей винды?
UnD)eaD)Snake вне форума Ответить с цитированием
Старый 20.08.2007, 00:15   #2
UnD)eaD)Snake
Форумчанин Подтвердите свой е-майл
 
Аватар для UnD)eaD)Snake
 
Регистрация: 07.07.2007
Сообщений: 241
По умолчанию

сам нашел:
function GetUserFromWindows: string;
var
UserName : string;
UserNameLen : Dword;
begin
UserNameLen := 255; SetLength(userName, UserNameLen);
if GetUserName(PChar(UserName), UserNameLen) then
Result := Copy(UserName,1,UserNameLen - 1)
else Result := 'Unknown';
end;
UnD)eaD)Snake вне форума Ответить с цитированием
Старый 20.08.2007, 09:17   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это даст тебе только одного пользователя для получения списка рули NetWkstaUserEnum
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2008, 00:40   #4
sysyman
Пользователь Подтвердите свой е-майл
 
Аватар для sysyman
 
Регистрация: 04.07.2007
Сообщений: 75
По умолчанию

Может мне кто сможет подсказать?
Дело в том что мне надо получить список зарегистрированных пользователей в винде. Я по крайней мере нашел 2 разных способа получения этого списка, но выводятся пользователи те что у меня зарегистрированы и вместе с ними встроенная учетная запись админа , службы поддержки и другие.А мне надо только те которые появляются в приветствии во время загрузки винды.
Исходники прилагаю.
Вложения
Тип файла: rar Новая папка (2).rar (10.0 Кб, 75 просмотров)
sysyman вне форума Ответить с цитированием
Старый 28.04.2008, 01:04   #5
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Если Вам это поможет.
В реестре
HKEY_LOCAL_MACHINE\SOFTWARE\Microso ft\Windows NT\CurrentVersion\Winlogon\SpecialA ccounts\UserList
содержится список пользователей.
У которых значение 0 значит они не отображаются, если 1 от отображаются в приветствии. если пользователя не значит значение 0.
Я так пользователей прячу.

Так вот, берёте Ваш (общий) список и удаляете тех кто в реестре и почти готовый результат.
Хотя должен быть другой путь, этот как усложнённая альтернатива.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 28.04.2008, 12:58   #6
sysyman
Пользователь Подтвердите свой е-майл
 
Аватар для sysyman
 
Регистрация: 04.07.2007
Сообщений: 75
По умолчанию

Конечно идея с реестром неплохая, но когда я заглянул в реестр по указанному пути то обнаружил всего одну знакомую запись , это help assistant и значение у него ноль, но другие записи мне ни о чем не говорят и даже близко не похожи на имена пользователей в системе .Я пробывал менять их значения с 1000 на 0, но при загрузке винды пользователи не менялись , значит скорее всего этот ключ не совсем то что мне нужно. Пробывал я схитрить. С помощью проги reg organizer я сделал снимок реестра, затем в учетных записях у одного из пользователей я сменил имя и после этого сделал еще один снимок реестра исравнил эти два снимка . В результате я выявил все изменения что вносит винда в реестр когда я меняю имя пользователя, вобщем я нашел ключ где винда хранит имена пользователей ,но он вроде как зашифрован и я опять в тупике. Должен быть какой то другой путь!
Ключ что я нашел ,по этому пути:HKEY_LOCAL_MACHINE\SOFTWARE\Mi crosoft\Cryptography\RNG
sysyman вне форума Ответить с цитированием
Старый 28.04.2008, 16:42   #7
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
Сообщение от sysyman
но другие записи мне ни о чем не говорят и даже близко не похожи на имена пользователей в системе
И не надо чтоб о чём-то говорили.
Я имел в виду.
Цитата:
Сообщение от Air
Так вот, берёте Ваш (общий) список и удаляете тех кто в реестре и почти готовый результат.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 28.04.2008, 21:04   #8
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию

Код:
function NetQueryDisplayInformation(ServerName: LPCWSTR; Level, Index, EntriesRequested, PrefMaxLen: DWord; var ReturnedCount: DWord; var Buffer: Pointer): dword; stdcall;external 'netapi32.dll' name 'NetQueryDisplayInformation';

 PNET_DISPLAY_USER = ^TNET_DISPLAY_USER;
  TNET_DISPLAY_USER = record
    usri1_name : LPWSTR;
    usri1_comment : LPWSTR;
    usri1_flags : DWord;
    usri1_full_name : LPWSTR;
    usri1_user_id : DWord;
    usri1_next_index : DWord;
  end;
TNetDisplayUserArray = array[0..(MaxInt div SizeOf(TNET_DISPLAY_USER))-1] of TNET_DISPLAY_USER;


procedure Tform1.GetuserList(list:tstrings);
var
moredata:boolean;
S : TLMWidechar;
error:dword;
readEntries:cardinal;
buffer:pointer;
I:integer;
begin
moredata:=true;
While Moredata do
if Netapi then
begin
    if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion < 5) then
    server:='//'+server else server:=server;
    s.Value:=nil;
    try
      CvtToWideChar(server,s);
      error:=NetQueryDisplayInformation(s.Value,1,0,Dword(-1),Dword(-1),readentries,buffer);
      if ((Error = 0) or (Error = ERROR_MORE_DATA)) then begin
        try
        if readentries>0 then
        for i:=0 to readentries-1 do
        list.Add(TNetDisplayUserArray(buffer^)[i].usri1_name);
        MoreData := (Error = ERROR_MORE_DATA);
        finally
        NetApiBufferFree(buffer);
        end;
        end;
    finally
      freemem(s.Value,s.Length);
    end;
end;
end;
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 28.04.2008, 23:57   #9
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

"vitalik007", если не секрет, где Вы взяли этот код.

Поправки к коду.
Код:
type
 PNET_DISPLAY_USER = ^TNET_DISPLAY_USER;
 TNET_DISPLAY_USER = record
 usri1_name : LPWSTR;
 usri1_comment : LPWSTR;
 usri1_flags : DWord;
 usri1_full_name : LPWSTR;
 usri1_user_id : DWord;
 usri1_next_index : DWord;
end;

type
NET_API_STATUS=DWord;
TLMWideChar = record
Value: PWideChar;
Length: DWord;
end;

var
  Netapi:boolean;
  server:String; //определяет имя компьютера, я так понял...

...

procedure CvtToWideChar(const S:string; var WS:TLMWideChar);
var
S1: string;
begin
if WS.Value <> nil then
 FreeMem(WS.Value,WS.Length);
S1:=Trim(S);
if Length(S1) > 0 then
 begin
  WS.Length:=(Length(S1)+1)*2;
  GetMem(WS.Value,WS.Length);
  StringToWideChar(S1,WS.Value,WS.Length);
 end
else
 begin
  WS.Length:=0;
  WS.Value:=nil;
 end;
end;
Однако, количество пользователей определяет, но не определяет их имена.

Строчка не понятна
Код:
 list.Add(TNetDisplayUserArray(buffer^)[i].usri1_name);
переделал
Код:
list.Add(TNetDisplayUserArray[i].usri1_name);
заработала, но без результатно.

Часть инфы взята с http://topic.csdn.net/t/20030212/11/1419961.html
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 29.04.2008, 00:12   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

http://programmersforum.ru/showpost....72&postcount=2
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить список пользователей из Active Directory SJMS Работа с сетью в Delphi 3 29.11.2010 09:32
Данные-проверка-список (список на другом листе) Inbox Microsoft Office Excel 7 26.12.2008 01:43
сделать в боте список зарегистрированных пользователей Kukkk Компоненты Delphi 2 06.10.2007 18:01
как вытащить иконки из DLL? andrey4623 Общие вопросы Delphi 2 20.08.2007 10:41