首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
亲,您未登录哦! 登录 | 注册

用Delphi编程来清除“添加/删除程序”中的残留项

打印文章

分享到:
狂热的软件爱好者,大多碰到过这样的情况:装过的程序删除或卸载后,有的在“添加/删除程序”中留有残留项,很是不爽!虽然可以用Regedit.exe打开注册表,找到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall”,来删除残留的信息,我不知道你怎么样,反正我是感到有点烦,于是我一怒之下,就来个一劳永逸,遍了下面这个程序来解决这个问题,虽然市面上有些软件也能解决这个问题,但是它需要我的钞票,因此还是自己来吧,另外,用自己的程序解决问题会有很大的成就感:)
程序的界面如下:
  
虽然有点简陋,但实用的很(有点王婆卖瓜),程序在Win2000 Pro SP2下用Delphi6.0企业版完成,运行于本机的WinME下也没问题,下面结合原代码与各位交流一下,不过别笑我呀!

{Unit1的代码:}

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Registry, StdCtrls, Buttons, CheckLst;   //Registry为后加上的
type
    TForm1 = class(TForm)
    CheckListBox1: TCheckListBox;
    SFSC: TBitBtn;   
    Sc: TBitBtn;     
    Bf: TBitBtn;     
    Dr: TBitBtn;     

    procedure SFSCClick(Sender: TObject);//是否删除
    procedure ScClick(Sender: TObject);//删除
    procedure BfClick(Sender: TObject);//注册表备份
    procedure DrClick(Sender: TObject);//导入备份
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
   procedure Createparams(Var Params:TCreateParams);override;
{ Public declarations }
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Createparams(var Params:TCreateParams); {保证本程序总在窗口最上层,可供你别的程序借鉴两个相同功能的程序碰到一块,谁先运行,谁在下面}
var wndParnet:HWND;   
begin
  Inherited CreateParams(Params);
  With Params do
  begin
   EXStyle:=ExStyle or WS_EX_TOPMOST OR WS_EX_ACCEPTFILES;
   wndParnet:=GetDesktopWindow;
  end;
end;

procedure TForm1.SFSCClick(Sender: TObject); // 看看是否删除
var
  intIndex:integer;
  registryTemp:TRegistry;
  stringTemp:TStrings;
  RunFile:string;
begin
  checkListBox1.Clear;
  registryTemp:=TRegistry.Create;
  stringTemp:=TStringList.Create;
   with registryTemp do
   begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',false) then
  GetKeyNames(stringTemp);
  CloseKey;
   end;
for intIndex:= 0 to stringTemp.Count-1 do
  CheckListBox1.Items.Add(stringTemp.Strings[intIndex]);
  registryTemp.free;
  stringTemp.Free ;
  RunFile:='Rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,0';
  WinExec(pchar(RunFile),SW_HIDE); {打开“控制面板”的“添加/删除选项”,程序运行到这儿,你就明白,我为什么要让我的程序总在视窗的最上层,不然被别人盖了,多不好玩!}
  Form1.Caption:='如果删除不对,请击“导入备份”按钮';
end;

procedure TForm1.ScClick(Sender: TObject); //删除
var
i:integer;
registryTemp:TRegistry;
strTemp:String;
begin
  for i := 0 to (CheckListBox1.Items.Count-1) do
    if CheckListBox1.Checked[i] then
   begin
    strTemp:=CheckListBox1.Items.Strings[i];
    registryTemp:=TRegistry.Create;
    registryTemp.RootKey :=HKEY_LOCAL_MACHINE;
    registryTemp.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',true);
    registryTemp.DeleteKey(strTemp);
    registryTemp.Free;
  end;
  Form1.Caption:='请击“是否删除”按钮,检查删除情况';
end;

procedure TForm1.BfClick(Sender: TObject); //注册表备份
var
RunFile:string;
begin
   DeleteFile('Backup.reg');
   RunFile:='Regedit /E Backup.reg HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
   WinExec(pchar(RunFile),SW_HIDE);
   Form1.Caption:='请选择要清除的项,然后击“删除”按钮';
end;

   procedure TForm1.DrClick(Sender: TObject); //导入备份
var
  Runfile:string;
  intIndex:integer;
  registryTemp:TRegistry;
  stringTemp:TStrings;
begin
  RunFile:='Regedit /s Backup.reg ';
  WinExec(pchar(RunFile),SW_HIDE);
  checkListBox1.Clear;
  registryTemp:=TRegistry.Create;
  stringTemp:=TStringList.Create;
   with registryTemp do
   begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',false) then
  GetKeyNames(stringTemp);
  CloseKey;
   end;
for intIndex:= 0 to stringTemp.Count-1 do
  CheckListBox1.Items.Add(stringTemp.Strings[intIndex]);
  registryTemp.free;
  stringTemp.Free ;
  Form1.Caption:='已导入备份,请重新选择删除';
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  intIndex:integer;
  registryTemp:TRegistry;
  stringTemp:TStrings;
begin
  checkListBox1.Clear;
  registryTemp:=TRegistry.Create;
  stringTemp:=TStringList.Create;
   with registryTemp do
   begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',false) then
  GetKeyNames(stringTemp);
  CloseKey;
   end;
for intIndex:= 0 to stringTemp.Count-1 do
  CheckListBox1.Items.Add(stringTemp.Strings[intIndex]);
  registryTemp.free;
  stringTemp.Free ;
  Form1.Caption:='“删除”之前,请先备份';
end;
End.

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

编程爱好者论坛

本栏最新文章