Hab mir jetzt mal eine eigene Procedure geschrieben um alle Benutzernamen + deren SIDs zu erhalten (Bin aber noch ein totaler Anfänger also erwartet jetzt nix!). List nur die Werte aus der Registry aus.
Die Procedure
Delphi-Quellcode:
procedure GetUsersAndSIDs(var Users,Sids:TStringList);
var
reg : Tregistry;
KeyNames:TstringList;
i:integer;
begin
Users.Clear;
Sids.Clear;
KeyNames:=TstringList.Create;
Reg:=Tregistry.Create;
reg.RootKey:=HKEY_USERS;
reg.OpenKey('',false);
reg.GetKeyNames(KeyNames);
i:=KeyNames.Count-1;
while i>=1 do
begin
reg.CloseKey;
if (reg.KeyExists(KeyNames.Strings[i]+'\Software\Microsoft\Windows\CurrentVersion\Explorer')) and not((KeyNames.Strings[i]='.DEFAULT')or not((KeyNames.Strings[i][Length(KeyNames.Strings[i])]<>'s')and(KeyNames.Strings[i][Length(KeyNames.Strings[i-1])]<>'e'))) then
begin
reg.OpenKey(KeyNames.Strings[i]+'\Software\Microsoft\Windows\CurrentVersion\Explorer',false);
if reg.ValueExists('Logon User Name') then
begin
if reg.ReadString('Logon User Name')<>'' then
begin
Sids.Add(KeyNames.Strings[i]);
Users.Add(reg.ReadString('Logon User Name'));
end;
end;
end;
i:=i-1;
end;
end;
Der Aufruf
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
Users,Sids:TStringList;
begin
Users:=TStringList.Create;
Sids:=TStringList.Create;
GetUsersAndSIDs(Users,Sids);
Listbox1.Items:=Users;
Listbox2.Items:=Sids;
FreeAndNil(Users);
FreeAndNil(Sids);
end;