Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Liste aller Windows-Benutzer (https://www.delphipraxis.net/57305-liste-aller-windows-benutzer.html)

daniel8520 18. Nov 2005 19:11


Liste aller Windows-Benutzer
 
Hallo DPler,

ich möchte gang gern mein Programm dazu bewegen mir eine Liste aller Windows-Benutzer anzuzeigen. Es geht hierbei um Win XP Home.
Da ich ja ein ordentliches Mitglied bin, hab ich auch schon die Suche benutzt, aber das hat leider alles nicht funktioniert.
Wie würdet ihr es denn machen?

Bitte helft mir.


Danke im Vorraus!

himitsu 18. Nov 2005 19:46

Re: Liste aller Windows-Benutzer
 
Hast du dir mal Luckies XP-UserManager gesehn?

http://www.delphipraxis.net/internal...ght=%2Amanager

Ich vermute also mal, daß sich eventuell etwas auf seiner Seite finden läßt :gruebel:

CalganX 18. Nov 2005 20:00

Re: Liste aller Windows-Benutzer
 
Hi,
guck mal nach [cl="NetUserEnum"]NetUserEnum[/cl].

Chris

Luckie 18. Nov 2005 20:47

Re: Liste aller Windows-Benutzer
 
Die entsprechende Unit habe ich erstmal von meinem Webspace genommen, da ich sie zur Zeit umstrukturiere.

daniel8520 18. Nov 2005 22:27

Re: Liste aller Windows-Benutzer
 
Genau diese NetUserEnum-Variante hab ich ausprobiert. Hat aber irgendwie nicht geklappt.
Und das Luckie die Datei vom Server genommen musste ich leider auch schon feststellen.

:roll:

MisterNiceGuy 18. Nov 2005 22:38

Re: Liste aller Windows-Benutzer
 
Damit sollte es geht:

Delphi-Quellcode:
var
  EntiesRead: DWORD;
  TotalEntries: DWORD;
  UserInfo: lpUSER_INFO_1;
  lpBuffer: Pointer;
  ResumeHandle: DWORD;
  Counter: Integer;
  NetApiStatus: LongWord;
repeat
    NetApiStatus := NetUserEnum(nil, 1, 0, lpBuffer, 0, EntiesRead,
      TotalEntries, ResumeHandle);
    UserInfo    := lpBuffer;
    for Counter := 0 to EntiesRead - 1 do
    begin
      listbox1.Items.Add(WideCharToString(UserInfo^.usri1_name));
      Inc(UserInfo);
    end;
    NetApiBufferFree(lpBuffer);
  until (NetApiStatus <> ERROR_MORE_DATA);
MfG Jonas

Luckie 18. Nov 2005 22:47

Re: Liste aller Windows-Benutzer
 
Ich habe den Source gerade vor mir:

Delphi-Quellcode:
function NetUserEnum(servername: LPCWSTR; level: DWORD; filter: DWORD; var
  buf: Pointer; prefmaxlen: DWORD; var entriesred: DWORD; var totalentries:
  DWORD; resumehandle: PDWORD): NET_API_STATUS; stdcall;

//...

implementation

const
  netapi32lib      = 'netapi32.dll';

function NetUserEnum; external netapi32lib name 'NetUserEnum';
Delphi-Quellcode:
type
  NET_API_STATUS = DWORD;
  TStringArray = array of WideString;

const
  NERR_Success     = 0;
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Procedure : EnumUsers
// Comment  : Enumerates all users on the local machine

function EnumUsers(const Server: WideString; filter: DWORD): TStringArray;
var
  ui1, pWork       : Pointer;
  EntriesRead, EntriesTotal: DWORD;
  NetError         : DWORD;
  Loop             : Integer;
begin
  ui1 := nil;
  pWork := nil;
  if Server <> '' then
  begin
    try
      NetError := NetUserEnum(PWideChar(Server), 0, filter, ui1,
        MAX_PREFERRED_LENGTH, EntriesRead, EntriesTotal, nil);
      if (NetError = NERR_SUCCESS) and (EntriesRead > 0) then
      begin
        pWork := ui1;
        SetLength(Result, EntriesRead);
        for Loop := 0 to EntriesRead - 1 do
        begin
          Result[Loop] := PUserInfo1(ui1)^.usri1_name;
          Inc(Integer(ui1), sizeof(Pointer));
        end;
      end;
    finally
      NetApiBufferFree(pWork);
    end;
  end;
end;

daniel8520 19. Nov 2005 09:35

Re: Liste aller Windows-Benutzer
 
@MisterNiceGuy

[Fehler] Message.pas(30): E2003 Undefinierter Bezeichner: 'lpUSER_INFO_1'
[Fehler] Message.pas(37): E2003 Undefinierter Bezeichner: 'NetUserEnum'

:? :?

daniel8520 19. Nov 2005 09:43

Re: Liste aller Windows-Benutzer
 
Hab's jetzt hinbekommen!

Vielen Dank!

:dp:

MisterNiceGuy 19. Nov 2005 10:34

Re: Liste aller Windows-Benutzer
 
Nur der Vollständigkeit halber:

Du musst Folgendes noch definieren:

Delphi-Quellcode:
type
  NET_API_STATUS = Integer;

function NetUserChangePassword(domainname, username, oldpassword,
  newpassword: LPCWSTR): NET_API_STATUS;
  stdcall; external 'netapi32.dll';
 
type
  USER_INFO_1 = record
    usri1_name: LPWSTR;
    usri1_password: LPWSTR;
    usri1_password_age: DWORD;
    usri1_priv: DWORD;
    usri1_home_dir: LPWSTR;
    usri1_comment: LPWSTR;
    usri1_flags: DWORD;
    usri1_script_path: LPWSTR;
  end;
  lpUSER_INFO_1 = ^USER_INFO_1;

function NetUserEnum(ServerName: PWideChar;
  Level,
  Filter: DWORD;
  var Buffer: Pointer;
  PrefMaxLen: DWORD;
  var EntriesRead,
  TotalEntries,
  ResumeHandle: DWORD): Longword; stdcall; external 'netapi32.dll';

function NetApiBufferFree(pBuffer: PByte): Longint; stdcall; external
'netapi32.dll';
Hatte ich vergessen :lol:
MfG Jonas


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz