程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 快捷方式/刪除項/EXE自刪除DIY (1)

快捷方式/刪除項/EXE自刪除DIY (1)

編輯:Delphi
每一個編程愛好者,都希望自己的作品能為大家接受和喜愛,但我們的作品大多是簡單的一個EXE文件的拷貝,既不需安裝也沒有刪除程序,讓人覺得只是程序而不是產品,以下我以Delphi 為例和大家交流一下程序組快捷方式建立、添加刪除程序組中的刪除項和程序的自刪除等功能。

  1.以下先來介紹建立程序組快捷方式的方法:

  在uses 單元中加入 shlobj,activex,comobj,在窗口中添加一個button,並在其事件中添加以下代碼:






procedure TForm1.Button1Click(Sender: TObject);
var sl:ishelllink;
pf:ipersistFile;
lnkName:Widestring;
app:string;
begin
olecheck(cocreateInstance(clsid_shellLink,nil,Clsctx_inproc_server,iShellLink,sl));
pf:=sl as IPersistFile;
app:=application.exename;
OleCheck(sl.SetPath(pchar(app)));//建立有效的鏈接
LnkName:='C:\Windows\Start Menu\Programs\redbird.lnk'; //設置目標文件
pf.Save(PWideChar(lnkName),true); //保存文件
end;

  當然以上這段代碼應放在程序第一次運行時的代碼段中,而且程序組或是桌面的位置最好要以注冊表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders中的對應值為准。您對注冊表的操作可通過Delphi對注冊表封裝了的TRegistry 來完成,此法比較簡單,在此就不再贅述,如您想寫出更小的程序或是您在用VB編程,那就得調用API.以下作者將以對注冊表API函數的直接調用向大家介紹如何建立添加刪除程序中的項目.同樣,這段代碼也應放在程序首次運行時執行。


program project1;
uses
Windows;

{$R *.RES}
type
TRegKeyInfo = record
NumSubKeys: Integer;
MaxSubKeyLen: Integer;
NumValues: Integer;
MaxValueLen: Integer;
MaxDataLen: Integer;
FileTime: TFileTime;
end;
var IHand:integer;
IKey:Hkey;
Regs: TRegKeyInfo;
begin
RegCreateKeyEx(HKEY_LOCAL_MacHINE, // 注冊表根鍵
'Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp'//你的程序項
, 0, nil,REG_OPTION_NON_VOLATILE, KEY_ALL_Access, nil, IKey, @IHand);


RegSetValueEx(Ikey, 'DisplayName'
, 0, REG_SZ, Pchar('刪除我吧!')//刪除列表中顯示的字符
,10); //字符長度
RegSetValueEx(Ikey, 'UninstallString',0
, REG_SZ, pchar(ParamStr(0)+' /UNINSTALL'),//刪除所調用的命令行
4);
end.

  此段代碼將 你的程序全路徑名和"/UNINSTALL"參數寫入了注冊表 HKEY_LOCAL_MacHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp中,你在添加刪除程序中可以看到“刪除我吧!”的項目,而當你點擊此項目時,你的程序通過ParamStr(1)將收到"/UNINSTALL"的參數,並以此為標識調用刪除程序的代碼即可。以下我們再來介紹當你的程序收到此參數後,不需調用其它程序而“自刪除”的兩個方法。

  其中之一是在接到此參數後動態建立一個刪除文件的批處理文件,在程序內部將安裝程序後生成的諸如快捷方式等文件和注冊表值刪除後在退出前調用此批處理文件將自己刪除即可,如:


procedure TForm1.FormCreate(Sender: TObject);
var f:textfile ;//作者不建議您將刪除代碼放在FormCreate事件中,作者認為那將出現不能刪除的可能性。
begin
AssignFile(f,'temp.bat');
Rewrite(F);
Writeln(f,'del '+paramstr(0));
Writeln(f,'del temp.bat');
closefile(f);
application.Terminate ;
winexec('temp.bat',SW_HIDE);
halt;
end;

 

  對文本文件的處理比較簡單,幾經摸索,作者又找到了更好的第二種方法,簡單易行,直接調用命令shell即可完成刪除工作

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved