Monday, 17 August 2009

Obtener la lista de aplicaciones instaladas

Normalmente cuando preparo algún equipo informático, lo dejo con su SO impoluto, unas cuantas aplicaciones y nada más. Todo el tema de documentación lo dejo en un servidor y mediante subversion por ejemplo dejo alguna copia en local para poder trabajar. De ésta manera la máquina acaba siendo tonta y reemplazable sin lamentar pérdidas ni nada por el estilo. Muchas veces hago un pequeño seguimiento sobre las aplicaciones instaladas en el equipo, y normalmente lo hacia a mano, es decir, tenía una pequeña lista en un excel con las aplicaciones que instalaba en el equipo y de ésta manera luego podía volver a instalar las aplicaciones que tenia el equipo. Pues bien, hoy os traigo una pequeña aplicación "Thundax Get App List", que devuelve la lista completa de programas instalados en nuestros PC's. El programa busca tanto en LOCAL MACHINE como en CURRENT USER. La aplicación es muy sencilla, y solo hay que acceder al registro de windows utilizando la clase TRegistry, y leyendo las diferentes carpetas dentro de la ruta:

Software\Microsoft\Windows\CurrentVersion\UnInstall

Una vez hecho esto, solo hay que recorrer la lista e ir guardando los valores con las versiones de las aplicaciones.

Aquí os dejo el código fuente:

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, Registry;
  
const
    sUninstall = 'Software\Microsoft\Windows\CurrentVersion\UnInstall';
  
procedure TForm1.GettAppInstalled(hKey: Cardinal; memoResult: TMemo);
    function PrintVersion(version: string): string;
    begin
        if version = '' then
            result := ''
        else
            result := ' - ' + version;
    end;
var
    RegList: TStrings;
    i: Integer;
    sVersion: string;
    Registry: TRegistry;
begin
    RegList := TStringList.Create;
    Registry := TRegistry.create();
    Registry.RootKey := hKey;
    if Registry.OpenKey(sUninstall, False) then
    begin
        Registry.GetKeyNames(RegList);
        Registry.CloseKey;
        for i := 0 to RegList.Count - 1 do
        begin
            if Registry.OpenKey(sUninstall + '\' + RegList[i], False) then
            begin
                sVersion := '';
                if Registry.ValueExists('DisplayVersion') then
                    sVersion := 'Version ' + Registry.ReadString('DisplayVersion');

                if CheckBox1.checked then
                    Memo1.lines.Add(RegList[i] + PrintVersion(sVersion))
                else if AnsiPos('{', RegList[i]) = 0 then
                    Memo1.lines.Add(RegList[i] + PrintVersion(sVersion));
                Registry.CloseKey
end;
        end;
    end;
    FreeAndNil(Registry);
    FreeAndNil(RegList);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    Memo1.lines.Clear;
    Memo1.lines.add('************ HKEY_LOCAL_MACHINE ************');
    GettAppInstalled(HKEY_LOCAL_MACHINE, Memo1);
    Memo1.lines.add('********************************************');
    Memo1.lines.add('************ HKEY_CURRENT_USER ************');
    GettAppInstalled(HKEY_CURRENT_USER, Memo1);
    Memo1.lines.add('********************************************');
end;

Y una muestra de la aplicación:


Ahora mediante la aplicación, podemos seleccionar todo el texto y copiarlo y guardarlo donde queramos, de ésta manera podemos saber que aplicaciones tenemos instaladas en nuestro equipo de manera rápida y fácil. La aplicación funciona perfectamente para Windows XP y Vista.

0 comments:

Post a Comment