본문 바로가기

카테고리 없음

[일반/컴포넌트] 설치된 모든 프로그램 읽어오기

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  REGKEYAPPS = 'SOFTWAREMicrosoftWindowsCurrentVersionUninstall';

var
  reg    : TRegistry;
  List1  : TStringList;
  List2  : TStringList;
  i, n   : integer;

begin
  reg    := TRegistry.Create;
  List1  := TStringList.Create;

  // 모든 설치된 프로그램 이름을 읽어온다
  with reg do
  begin
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKey(REGKEYAPPS, false);
    GetKeyNames(List1);
  end;

  for i := 0 to List1.Count -1 do
  begin
    List2  := TStringList.Create;

    try
      // 각 프로그램의 하위 '값이름'들을 List2에 읽는다
      reg.OpenKey(REGKEYAPPS + ''+ List1.Strings[i], false);
      reg.GetValueNames(List2);

      // '값이름' 이 'DisplayName' 인것을 찾아 '값데이터'를 출력한다
      n := List2.IndexOf('DisplayName');
      if (n <> -1) and
         (List2.IndexOf('UninstallString') <> -1) then // 실행파일명
      begin
        ListBox1.Items.Add((reg.ReadString(List2.Strings[n])));
      end;
    finally
      List2.Free;
    end;  
  end;

  List1.Free;
  reg.CloseKey;
  reg.Destroy;
end;

end.