Получить список пользователей Delphi , ОС и Железо , Windows
Получить список пользователей
Нас Reboot, а мы крепчаем.
GetLocalUserList - возвращает список пользователей (Windows NT, Windows 2000)
unit Func;
interface
uses Sysutils, Classes, Stdctrls, Comctrls, Graphics, Windows;
////////////////////////////////////////////////////////////////////////////////
{$EXTERNALSYM NetUserEnum}
function NetUserEnum(servername: LPWSTR;
level,
filter: DWORD;
bufptr: Pointer;
prefmaxlen: DWORD;
entriesread,
totalentries,
resume_handle: LPDWORD): DWORD; stdcall ;
external 'NetApi32.dll' Name 'NetUserEnum';
function NetApiBufferFree(Buffer: Pointer {LPVOID} ): DWORD; stdcall ;
external 'NetApi32.dll' Name 'NetApiBufferFree';
////////////////////////////////////////////////////////////////////////////////
procedure GetLocalUserList(ulist: TStringList);
implementation
//------------------------------------------------------------------------------
// возвращает список пользователей локального хоста
//------------------------------------------------------------------------------
procedure GetLocalUserList(ulist: TStringList);
const
NERR_SUCCESS = 0;
FILTER_TEMP_DUPLICATE_ACCOUNT = $0001;
FILTER_NORMAL_ACCOUNT = $0002;
FILTER_PROXY_ACCOUNT = $0004;
FILTER_INTERDOMAIN_TRUST_ACCOUNT = $0008;
FILTER_WORKSTATION_TRUST_ACCOUNT = $0010;
FILTER_SERVER_TRUST_ACCOUNT = $0020;
type
TUSER_INFO_10 = record
usri10_name,
usri10_comment,
usri10_usr_comment,
usri10_full_name: PWideChar;
end ;
PUSER_INFO_10 = ^TUSER_INFO_10;
var
dwERead, dwETotal, dwRes, res: DWORD;
inf: PUSER_INFO_10;
info: Pointer;
p: PChar;
i: Integer;
begin
if ulist = nil then
Exit;
ulist.Clear;
info := nil ;
dwRes := 0;
res := NetUserEnum(nil ,
10,
FILTER_NORMAL_ACCOUNT,
@info,
65536,
@dwERead,
@dwETotal,
@dwRes);
if (res <> NERR_SUCCESS) or (info = nil ) then
Exit;
p := PChar(info);
for i := 0 to dwERead - 1 do
begin
inf := PUSER_INFO_10(p + i * SizeOf(TUSER_INFO_10));
ulist.Add(WideCharToString(PWideChar((inf^).usri10_name)));
end ;
NetApiBufferFree(info);
end ;
end .
Here is the translation of the content into Russian:
Программа на Delphi, которая извлекает список локальных пользователей на компьютере Windows с помощью функции NetUserEnum
из библиотеки NetApi32.dll
.
Разбивка кода:
Единицы и интерфейсы
Программа начинается с объявления нескольких единиц (библиотек) и интерфейсов:
unit Func ;
interface
uses Sysutils , Classes , StdCtrls , ComCtrls , Graphics , Windows ;
Эти единицы предоставляют различные функциональности, такие как системные утилиты, классы, стандартные контролы, COM-контроли, графику и функции Windows API.
Функция NetUserEnum
Функция NetUserEnum
объявлена с следующим сигнатурой:
function NetUserEnum ( servername : LPWSTR ;
level , filter : DWORD ;
bufptr : Pointer ;
prefmaxlen : DWORD ;
entriesread , totalentries , resume_handle : LPDWORD ) : DWORD ; stdcall ;
Эта функция извлекает список пользователей на компьютере Windows. Она принимает несколько параметров:
servername
: Имя сервера для запроса (в этом случае nil
указывает на локальный компьютер).
level
: Уровень детализации информации о пользователях.
filter
: Значение фильтра, которое specifies which types of users to include in the list.
bufptr
: Указатель на буфер, где будет храниться информация о пользователях.
prefmaxlen
: Максимальная длина каждого входа в списке пользователей.
entriesread
, totalentries
и resume_handle
- параметры вывода.
Функция возвращает код ошибки, который проверяется на успех (NERR_SUCCESS).
Функция NetApiBufferFree
Эта функция используется для освобождения памяти, выделенной функцией NetUserEnum
:
function NetApiBufferFree ( Buffer : Pointer {LPVOID} ) : DWORD ; stdcall ;
Она принимает указатель на буфер и возвращает код ошибки.
Процедура GetLocalUserList
Главная процедура, GetLocalUserList
, объявлена следующим образом:
procedure GetLocalUserList ( ulist : TStringList ) ;
Эта процедура извлекает список локальных пользователей на компьютере и хранит его в параметре ulist
, который является объектом TStringList
.
Имплементация
Секция реализации определяет несколько констант, типов и переменных:
const
NERR_SUCCESS = 0 ;
FILTER_TEMP_DUPLICATE_ACCOUNT = $0001 ;
FILTER_NORMAL_ACCOUNT = $0002 ;
FILTER_PROXY_ACCOUNT = $0004 ;
FILTER_INTERDOMAIN_TRUST_ACCOUNT = $0008 ;
FILTER_WORKSTATION_TRUST_ACCOUNT = $0010 ;
FILTER_SERVER_TRUST_ACCOUNT = $0020 ;
type
TUSER_INFO_10 = record
usri10_name ,
usri10_comment ,
usri10_usr_comment ,
usri10_full_name : PWideChar ;
end ;
PUSER_INFO_10 = ^ TUSER_INFO_10 ;
var
dwERead , dwETotal , dwRes , res : DWORD ;
inf : PUSER_INFO_10 ;
info : Pointer ;
p : PChar ;
i : Integer ;
Эти определения включают константы для кодов ошибок и значений фильтра, а также тип записи TUSER_INFO_10
для хранения информации о пользователях.
Процедура использует следующие переменные:
ulist
: Объект TStringList
, который будет хранить список локальных пользователей.
info
: Указатель на буфер, выделенный функцией NetUserEnum
.
dwERead
, dwETotal
и dwRes
: Параметры вывода для количества прочитанных записей, общего количества записей и кода ошибки соответственно.
inf
: Указатель на запись TUSER_INFO_10
, которая хранит информацию о пользователе.
p
: Указатель на массив символов.
i
: Целочисленная индекс.
Процедура выполняет следующие шаги:
Очищает объект ulist
.
Выделяет буфер с помощью функции NetUserEnum
.
Проверяет, была ли выделена память успешно, и выходит, если нет.
Перебирает записи пользователей в буфере, хранит каждую запись как строку в объекте ulist
.
Освобождает память, выделенную функцией NetUserEnum
.
В целом, эта программа предоставляет простой способ извлечения списка локальных пользователей на компьютере Windows с помощью функции NetUserEnum
из библиотеки NetApi32.dll
.
В статье рассмотрен функционал получения списка пользователей на локальном хосте с помощью процедуры GetLocalUserList, которая использует библиотеку NetApi32.dll и возвращает список пользователей в виде строки.
Комментарии и вопросы Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Windows ::