Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Адекватный список установленных программ (http://forum.oszone.net/showthread.php?t=267180)

McLotos 30-08-2013 21:10 2210349

Адекватный список установленных программ
 
Доброго времени суток, господа.
Возник небольшой тупик программе.
Вытягиваю из реестра список установленных программ, но никак не могу его правильно отобразить. Подскажите где ошибка
Код:

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 2210707

Ну неужели никто не знает? =(

opel431 01-09-2013 14:42 2211045

Цитата:

Цитата McLotos
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 2211051

А как убрать всё лишнее?

opel431 01-09-2013 14:59 2211053

Цитата:

Цитата McLotos
А как убрать всё лишнее? »

1. В Вашем случае лишнего нет. Просто разные подходы к заполнение ListBox, при использовании цикла (for...) Вы можете заняться обработкой каждой строки (что Вам и нужно - обработчик if...then), при использовании процедуры AddStrings - копируете все строки без обработки, а вот перехват ошибок (try...finally...end) надо добавить.

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

McLotos 01-09-2013 17:56 2211137

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

opel431 01-09-2013 18:16 2211145

Цитата:

Цитата McLotos
Вот как их убрать из списка »

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


Время: 23:41.

Время: 23:41.
© OSzone.net 2001-