Войти

Показать полную графическую версию : [решено] Адекватный список установленных программ


McLotos
30-08-2013, 21:10
Доброго времени суток, господа.
Возник небольшой тупик программе.
Вытягиваю из реестра список установленных программ, но никак не могу его правильно отобразить. Подскажите где ошибка
var
Reg : TRegistry;
SoftList : TStringList;
I: Integer;
begin
Form1.show;
Form1.ListBox1.Items.Clear;
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;

SoftList := TStringList.Create;

Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall', False);
Reg.GetKeyNames(SoftList);

For I := 0 to SoftList.Count - 1 do

Form1.ListBox1.Items.Add(SoftList.Strings[I]);

FreeAndNil(Reg);
FreeAndNil(SoftList);
end;

Выводится куча всего лишнего (пакеты обновлений, сервис-паки и т.д.)
Как убрать всё это?

McLotos
31-08-2013, 19:02
Ну неужели никто не знает? =(

opel431
01-09-2013, 14:42
Form1.ListBox1.Items.Add(SoftList.Text); //думаю проблема где-то здесь »
// к массиву строк в списке нужно еще и обратится с просьбой - дай мне пожалуйста очередную строку на "обработку"

begin
Form1.ListBox1.Items.Add(SoftList.Strings(I));
//или так
Form1.ListBox1.Items.Add(SoftList(I));
end;

// без "обработки" можете использовать и так, Form1.ListBox1.Items.AddStrings(SoftList) - загнать все скопом.

McLotos
01-09-2013, 14:49
А как убрать всё лишнее?

opel431
01-09-2013, 14:59
А как убрать всё лишнее? »
1. В Вашем случае лишнего нет. Просто разные подходы к заполнение ListBox, при использовании цикла (for...) Вы можете заняться обработкой каждой строки (что Вам и нужно - обработчик if...then), при использовании процедуры AddStrings - копируете все строки без обработки, а вот перехват ошибок (try...finally...end) надо добавить.

2. Form1.show! А почему не делать все при создании формы - Form1.Create?

McLotos
01-09-2013, 17:56
По первому пункту Вашего сообщения хотелось бы пояснить что под "всё лишнее" подразумевались пакеты обновления Windows, сервис-паки программ и всё в этом духе. Вот как их убрать из списка
По второму, могу сказать что приведённый код отвечает лишь за вывод маленького окошка в программе, именно поэтому есть Form1.Show (показать форму1) при событии onclick на кнопке другой формы (основной программы)

opel431
01-09-2013, 18:16
Вот как их убрать из списка »
В цикле добавляете только то, что вам нужно, остальное в утиль.
If <условие> then
// если только из SoftList, то проверьте и откиньте (Pos) ключи начинающиеся с '{'
// в подключах можно также проверять:
// все от Microsoft можно отсеять через проверку параметра в ключе - Publisher, там явное значение = Microsoft Corporation
// программы смотрите в ключе - DisplayName и так далее...




© OSzone.net 2001-2012