Вывести информацию о пользователях, подключенных к рабочей станцииDelphi , Интернет и Сети , СетьВывести информацию о пользователях, подключенных к рабочей станции
Оформил: DeeCo type THostInfo = record username: PWideChar; logon_domain: PWideChar; other_domains: PWideChar; logon_server: PWideChar; end; WKSTA_USER_INFO_0 = packed record wkui0_username: PWideChar; end; PWKSTA_USER_INFO_0 = ^WKSTA_USER_INFO_0; implementation {$R *.dfm} function NetWkstaUserEnum(servername: PWideChar; // Pointer to a string that specifies the DNS or NetBIOS name of the // remote server on which the function is to execute. // If this parameter is nil, the local computer is used. level: DWORD; // Level = 0 : Return the names of users currently logged on to the workstation. var bufptr: Pointer; // Pointer to the buffer that receives the data prefmaxlen: DWORD; // Specifies the preferred maximum length of returned data, in bytes. var entriesread: PDWord; // Pointer to a value that receives the count of elements actually enumerated. var totalentries: PDWord; // total number of entries var resumehandle: PDWord) // contains a resume handle which is used to continue an existing search : Longint; stdcall; external 'netapi32.dll' Name 'NetWkstaUserEnum'; function EnumNetUsers(HostName: WideString {; Users: TStrings}): THostInfo; const STR_ERROR_ACCESS_DENIED = 'The user does not have access to the requested information.'; STR_ERROR_MORE_DATA = 'Specify a large enough buffer to receive all entries.'; STR_ERROR_INVALID_LEVEL = 'The level parameter is invalid.'; var Info: Pointer; ElTotal: PDWord; ElCount: PDWord; Resume: PDWord; Error: Longint; // UI : PWKSTA_USER_INFO_0; // i : Integer; begin Resume := 0; NetWkstaUserEnum(PWideChar(HostName), 1, Info, 0, ElCount, ElTotal, Resume); Error := NetWkstaUserEnum(PWideChar(HostName), 1, Info, 256 * Integer(ElTotal), ElCount, ElTotal, Resume); case Error of ERROR_ACCESS_DENIED: Result.UserName := STR_ERROR_ACCESS_DENIED; ERROR_MORE_DATA: Result.UserName := STR_ERROR_MORE_DATA; ERROR_INVALID_LEVEL: Result.UserName := STR_ERROR_INVALID_LEVEL else if Info <> nil then begin Result := THostInfo(info^); { To retrieve all users: UI := PWKSTA_USER_INFO_0(Info); for i := 1 to DWord(ElCount) do begin Users.Add(UI^.wkui0_username); inc(UI); end; } end else begin Result.UserName := 'N/A'; Result.logon_domain := 'N/A'; Result.other_domains := 'N/A'; Result.logon_server := 'N/A'; end; end; end; procedure TForm1.Button1Click(Sender: TObject); var HostInfo: THostInfo; begin // Specify target machine as argument (with or without preceding \\) HostInfo := EnumNetUsers('WORKSTATION'); with HostInfo do begin Memo1.Lines.Add(username + #13#10+ logon_domain + #13#10+ other_domains + #13#10+ logon_server); end; end; Программа на Delphi, использующая функцию Windows NetWkstaUserEnum для получения информации о пользователях, которые в данный момент зарегистрированы на рабочем станции. Программа определяет две функции: NetWkstaUserEnum и EnumNetUsers. Функция NetWkstaUserEnum - это внешняя функция, импортированная из библиотеки netapi32.dll. Она принимает несколько параметров:
Функция EnumNetUsers - это обёртка вокруг функции NetWkstaUserEnum. Она принимает два параметра: HostName (широкая строка) и Users (экземпляр TStrings). Функция вызывает NetWkstaUserEnum с указанным именем хоста, уровнем 0 и другими параметрами. Функция возвращает запись THostInfo, содержащую информацию о пользователях, зарегистрированных на рабочей станции. Если при перечислении возникла ошибка, функция устанавливает переменную Result в строку, описывающую ошибку. В обработчике события Button1Click программа вызывает EnumNetUsers с именем хоста 'WORKSTATION' и получает список пользователей, зарегистрированных на этом рабочем станции. Полученная информация затем отображается в текстовом поле (Memo1). В предложениях улучшений и советах указаны следующие моменты:
В альтернативном решении используется компонент Delphi TNetWkstaUserEnum:
В этом решении используется компонент TNetWkstaUserEnum, который обёртывает сложность функции NetWkstaUserEnum. Программа создает экземпляр компонента, устанавливает имя хоста в 'WORKSTATION', а затем перечисляет пользователей, зарегистрированных на этом рабочем станции. Полученная информация отображается в текстовом поле (Memo1). Описывается функция EnumNetUsers, которая выводит информацию о пользователях, подключенных к рабочей станции. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |