Przykład:
var
Icon : TIcon;
Reg : TRegistry;
Values : TStrings;
i: Integer;
begin
Icon := TIcon.Create;
Reg := TRegistry.Create;
Values := TStringList.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\JakisKlucz', True);
Reg.GetValueNames(Values); // bierzemy wpisy z rejestru
for i := 0 to Values.Count - 1 do
begin
// kolejno dodajemy wpisy do ListView
ListView1.Items.Add.Caption := Values.Strings[i];
ListView1.Items.Item[i].SubItems.Add(Reg.ReadString(Values.Strings[i]));
Icon.Handle := ExtractIcon(hInstance,PChar(Values.Strings[i]),0); // pobieramy ikone programu
if Icon.Handle = 0 then // jezeli nie ma ikony
ListView1.Items.Item[i].ImageIndex := -1
else
begin //jezeli jest
ImageList1.AddIcon(Icon); // dodajemy ją do ImageList
ListView1.Items.Item[i].ImageIndex := ImageList1.Count -1 // numer ikony w ImageList dla danego wpisu
end;
end;
finally
Icon.Free;
Reg.Free;
Values.Free;
end;
end;
Do uses musisz dopisać ShellApi i Registry
[<font color="red">Dopisane do postu poniżej</span>]
Nie napisałeś wcześniej z jakiego klucza masz zamiar pobierać listę tych programów. Skąd miałem wiedzieć, że chodzi Tobie o "autostart" ?
Tak trudno trochę pomyśleć i wprowadzić zmiany ?
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\JakisKlucz', True);
na:
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
Tylko, że w tych wpisach mogą być również parametry z jakimi mają być uruchamiane programy. Wtedy możesz zapomnieć o odczytaniu ikonki tą procedurą, którą podałem. Musisz sam sobie poradzić z wycięciem tych parametrów :P