我的学习生涯(Delphi篇) - 04
来源:互联网 发布:邝盛 知乎 编辑:程序博客网 时间:2024/04/30 07:38
编程是一件有乐趣的工作!
比如,我们可以实现各种异想天开的东西。
下面的例子,就是可执行程序的自我删除。
-------------------------------------------------------------------------------------------------美丽分割线---------------------------
年代:2005
文件:my0629.7z
效果如下图:
Unit1.pas
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end;type TRegKeyInfo = record NumSubKeys: Integer; MaxSubKeyLen: Integer; NumValues: Integer; MaxValueLen: Integer; MaxDataLen: Integer; FileTime: TFileTime;end;var Form1: TForm1; IHand:integer; IKey:Hkey; Regs: TRegKeyInfo;implementationuses shlobj,activex,comobj;{$R *.dfm}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;procedure TForm1.Button2Click(Sender: TObject);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;procedure TForm1.Button3Click(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; //对文本文件的处理比较简单,几经摸索,作者又找到了更好的第二种方法,简单易行,直接调用命令shell即可完成删除工作: //application.Terminate; //winexec(pchar('command.com /c del '+ParamStr(0)),SW_MINIMIZE);//最小化执行删除操作,否则将看到DOS窗口的瞬间闪烁 //halt; end;end.
- 我的学习生涯(Delphi篇) - 04
- 我的学习生涯(Delphi篇) - 完结篇
- 我的学习生涯(Delphi篇) - 00
- 我的学习生涯(Delphi篇) - 01
- 我的学习生涯(Delphi篇) - 02
- 我的学习生涯(Delphi篇) - 03
- 我的学习生涯(Delphi篇) - 05
- 我的学习生涯(Delphi篇) - 06
- 我的学习生涯(Delphi篇) - 07
- 我的学习生涯(Delphi篇) - 08
- 我的学习生涯(Delphi篇) - 09
- 我的学习生涯(Delphi篇) - 10
- 我的学习生涯(Delphi篇) - 11
- 我的学习生涯(Delphi篇) - 12
- 我的学习生涯(Delphi篇) - 13
- 我的学习生涯(Delphi篇) - 14
- 我的学习生涯(Delphi篇) - 15
- 我的学习生涯(Delphi篇) - 16
- windbg条件断点设置
- 机房收费系统完美设计——获得系统时间
- 21位水仙花数(Java BigInteger与回溯)
- 指针作为函数参数(备忘)
- go学习【三】面向对象啊
- 我的学习生涯(Delphi篇) - 04
- ubuntu 中vim的安装与使用
- django部署
- 使用Xcode和Instruments调试解决iOS内存泄露
- 通过虚拟机在windows7下搭建Linux编程环境
- 二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现
- hdu 1874 畅通工程续
- 传输表空间简介
- 推荐一款国人开发的 MVC快速开发框架 Bee Framework