Delphi получить список установленных программ

Просмотрев комментарии к своей прошлой статье о создании оболочки для диска, я обратил внимание на слова Abigor’а, процитирую: «Вот если бы ты описал, для широкого круга, возможность создания списка программ на установку и запуском их в соответствии с очередностью в списке, это было бы уже другое дело.» Так как подробностей о том, какая же она все-таки должна быть здесь немного, то пришлось написать что-то похожее, но идея я думаю была полностью реализована.

Постановка задачи. Подготовка

Писать будем на Delphi. Исходя из идеи, мы должны создать список программ, которые будут видны в нашей программе, и предоставить возможность выбора(какие программы устанавливать), после чего начать устанавливать их по очереди, не отвлекаясь на поиск setup’ного файла в папках. Список программ будет создан заранее и ручками. Хранить названия программ, путь доступа к ним, относительно нашего exe’шника, и краткое описание, будем в ini файле. Структура ini файла:

[Название программы] Path=путь к программе Text=краткое описание
[winamp.exe] Path=softwinamp.exe Text=плейер

К тому же наша программа будет сохранять введенные пользователем данные, в случае перезагрузки компьютера (что часто бывает после установки драйверов), и запускать после неё для продолжения операций. Для хранения настроек будем использовать спецкаталог для временных файлов. На этом, пожалуй, подготовительный этап закончен.

Установка и активация Delphi Autocom CDP 2017. Настройка BLUETOOTH соединения с Delphi Ds150e.

Реализация

Нам естественно понадобится форма, назовем её installform. Также бросить на неё компоненты: ChtckListBox, 4 Button’a , Memo ( по желанию добавьте, что-нибудь что будет пояснять что для чего). Присвоим имена в том же порядке, в котором положили на форму компоненты: filelist, startbutton, closebutton, allbutton, nonebutton, textlist. После старта программы сразу должны отображаться доступные программы, для этого пишем следующее:

procedure TInstallForm.FormCreate(Sender: TObject); var s:string; f:textfile; i:integer; res:word; begin // определяем местоположение папки Temp temppath := StrAlloc(255); res:= gettemppath(255,temppath); // ассоциируем переменную inifile типа TIniFile с нашим ini файлом INIFile:=TIniFile.Create(extractfilepath(application.ExeName)+’installlist.ini’); // создаем tstr:TStringList для хранения названия программ tstr:=TStringList.Create; // считываем названия прог в tstr inifile.ReadSections(tstr); // отображаем в filelist’е filelist.Items.AddStrings(tstr); // проверяем были ли до этого сохранены какие-нибудь данные (в случае //перезагрузки компа или его отключения до окончания операции установки) if fileexists(temppath+’installlist.txt’)=true then begin assignfile(f,temppath+’installlist.txt’); reset(f); readln(f,s); while not eof(f) do begin readln(f,s); for i:=0 to filelist.count-1 do if filelist.Items.Strings[i]=s then filelist.Checked[i]:=true; end; closefile(f); end; end;

Читайте также:
Программа скомпилируется будет вызвана функция double square float value

Как видно, данные о предшествующей загрузке будем хранить в txt файле. Если файл существует, то применяем соответствующие настройки. Теперь рассмотрим случай, когда понадобится сбросить выбор всех программ или же наоборот поставить в очередь сразу все проги. Вот для этого мы будем использовать allbutton и nonebutton: при нажатии на первую будут устанавливаться флажки, а на вторую сниматься. Пишем этот код:

Установка и активация Autocom Delphi DS150E cars 2015.Release3


procedure TInstallForm.AllButtonClick(Sender: TObject); var i:integer; begin for i:=0 to filelist.Count-1 do filelist.Checked[i]:=true; end; procedure TInstallForm.NoneButtonClick(Sender: TObject); var i:integer; begin for i:=0 to filelist.Count-1 do filelist.Checked[i]:=false; end;

Несложно, правда. Теперь займемся отображением описания каждой программы. Для этого код вот этот:

procedure TInstallForm.FileListClick(Sender: TObject); var def:string; begin textlist.Clear; textlist.LineS.add( inifile.ReadString(filelist.Items.strings[filelist.itemindex],’Text’,def)); end;

Кстати, переменная inifile распространяется на всю нашу прогу. Здесь мы просто выводим в textlist, то что считали из ini файла (это происходит при клике по надписи выбранной строки). Ну, теперь опишем кнопку closebutton:

procedure TInstallForm.CloseButtonClick(Sender: TObject); var reg:tregistry; begin reg:=tregistry.Create; reg.RootKey:=HKEY_LOCAL_MACHINE; if reg.openkey(‘SOFTWAREMicrosoftWindowsCurrentVersionRun’,false)=true then begin reg.DeleteValue(‘AutoInstall’) ; end; reg.CloseKey; reg.Destroy; deletefile(temppath+’installlist.txt’); application.Terminate; end;

А что так много спросите вы?

Казалось бы application.terminate и все, но не так все просто, а вот почему: дело в том, что если выход из программы корректен, то нам нужно удалить из реестра следы нами оставленные (оставим мы их только при незавершенных операция установки), или просто удостовериться, что их там нет(и рам и пользователю спокойно). Также удаляем файл с настройками. Почему application.terminate, а не installform.close, потому что мне полгода твердили в институте, что так правильнее (хотя кто как хочет). переходим к самому сложному в коде — описанию кнопки startbutton. Хотя если хоть немного читать и иметь под рукой MSDN и это несложно (сам проверял). Итак, пишем вот это:

Читайте также:
Программа действий и план действий в математике

procedure TInstallForm.StartButtonClick(Sender: TObject); var k,i:integer; def:string; f:textfile; reg:tregistry; pres:string; begin // сохраняем себя в реестре (на всякий случай) reg:=tregistry.Create; reg.RootKey:=HKEY_LOCAL_MACHINE; if reg.openkey(‘SOFTWAREMicrosoftWindowsCurrentVersionRun’,false)=true then begin pres:=reg.ReadString(‘AutoInstall’); if (pres=»)or(pres<>application.exename) then if reg.CreateKey(‘AutoInstall’)=true then reg.WriteString(‘AutoInstall’,application.exename); end; reg.CloseKey; reg.Destroy; // минимизируемся showwindow(installform.Handle,2); // обрабатываем все отмеченные флаги по очереди for k:=0 to tstr.count-1 do begin // предварительно сохраняем настройки в installlist.txt assignfile(f,temppath+’installlist.txt’); rewrite(f); for i:=0 to filelist.count-1 do if filelist.Checked[i]=true then writeln(f,filelist.items.strings[i]); closefile(f); if filelist.Checked[k]=true then begin filelist.Checked[k]:=false; StartAndWaitEnd(extractfilepath(application.ExeName)+ inifile.ReadString(tstr.Strings[k],’Path’,def)); end; end; // после окончания операции устраняем себя из реестра reg:=tregistry.Create; reg.RootKey:=HKEY_LOCAL_MACHINE; if reg.openkey(‘SOFTWAREMicrosoftWindowsCurrentVersionRun’,false)=true then begin reg.DeleteValue(‘AutoInstall’) ; end; reg.CloseKey; reg.Destroy; // возвращаем окно к исходному виду и положению showwindow(installform.Handle,1); // убиваем файл с настройками deletefile(temppath+’installlist.txt’); end;

Вот и все. А нет не все я еще не рассказал о функции StartAndWaitEnd. Она нужна для того, чтобы запустить приложение, передать ему управление и, дождавшись его закрытия, передать управление нашей проге для продолжения работы. Вот и код этой функции:

Здесь CreatePorcess запускает выбранное приложение, а WaitForSingleObject ожидает, пока процесс завершится. Кто хочет знать больше — читайте MSDN, есть еще много всякой литературы по этому поводу. Вот теперь все!

Заключение

Это вроде все, но если кто знает способ по-лучше с удовольствием ознакомлясь. Не забудьте подключить модули Registry и IniFiles. Кстати, сама наша прога будет недоступна пока работает запущенное с помощью неё приложение (много пытался не получилось «оживить»), а так все работает корректно, а нажимать «да», «далее», «готово» придется все равно самому. Пишите комментарии, почитаю.

Если у кого-то есть предложения (например, как и Abigor’а оставьте сообщение kosfiz’у или в комментарии опишите). Если у кого есть вопросы, то пишите мне на ящик, обязательно отвечу. Прошу прощение за возможные опечатки.

P.S. Abigor, ну как получилось?

Источник: codenet.ru

DELPHI ПОЛУЧИТЬ СПИСОК УСТАНОВЛЕННЫХ ПРОГРАММ

Delphi позволяет получить список установленных программ, используя для этого системные функции Windows. Для этого необходимо воспользоваться функцией GetInstalledSoftware, которая возвращает список всех установленных программ в виде массива строк.

Читайте также:
Программа чтобы найти майнер

var Reg: TRegistry; UninstallKey: string; DisplayName, UninstallString: string;begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; UninstallKey := ‘SoftwareMicrosoftWindowsCurrentVersionUninstall’; if Reg.OpenKeyReadOnly(UninstallKey) then begin for I := 0 to RegkeyCount — 1 do begin DisplayName := Reg.ReadString(‘DisplayName’); UninstallString := Reg.ReadString(‘UninstallString’); // Делаем что-то с DisplayName и UninstallString end; end; finally Reg.Free; end;

Здесь мы открываем ветку реестра, содержащую информацию об установленных программах, проходим по всем ключам и считываем значения DisplayName и UninstallString. После этого уже с полученными данными можно делать нужные действия.

Установка и активация Delphi Autocom CDP 2017. Настройка BLUETOOTH соединения с Delphi Ds150e.

Как создать список установленных программ на компьютер

DELPHI DS150E V2023 обзор функционала

Embarcadero Delphi Обзор преимуществ / Установка / Удаление / Community Edition IDE / 2022 Бесплатно

Деловая программа ПМЭФ-2023. День третий: прямая трансляция

✅ Не запускается уже установленный Autocom 2020.23 ошибки запуска автоком

Источник: delphi-hlp.ru

Delphi получить список установленных программ

Это с какого перепугу ?

← →
AlexT1000 ( 2006-10-11 14:46 ) [2]

Хорошо. Как мне получить список установленных программ в каком бы то нибыло виде?

← →
AlexT1000 ( 2006-10-11 14:52 ) [3]

Это с какого перепугу ?

К примеру, я скопировал на некий свой лок.том некий «самодостаточный» файл некоего ДОС-приложения. Можно ли считать что я «установил» эту программу ?

Может, но не обязана.

не есть «закон божий»)

← →
AlexT1000 ( 2006-10-11 15:24 ) [8]

HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstall
посмотрел . не подходит.
там нет путей к программе . т.е я не могу узнать имя запускаемого exe файла
только к uninstall

Есть еще какие-либо пути?

Мне нужен список программ, которые видны в окне Установка Удаление Программ

Они как раз и берутся из

HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstall

← →
AlexT1000 ( 2006-10-11 15:46 ) [13]

BiN -> Немогу достать. У меня XP

если есть возможность сбросьте на мой email

← →
AlexT1000 ( 2006-10-11 15:50 ) [14]

Сергей М. ->
из HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstall
невозможно получить имя исполняемого файла данной программы

Источник: delphimaster.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru