频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者: 出处:巧巧读书 2007-12-12 进入讨论组


狂热的软件爱好者,大多碰到过这样的情况:装过的程序删除或卸载后,有的在“添加/删除程序”中留有残留项,很是不爽!虽然可以用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.

文章地址: http://www.qqread.com/delphi/d257858.html 更多文章 更多内容请看Java编程开发手册专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章