使用50次procedure TfrmLogin.FormCreate(Sender: TObject); const _Path = 'Software\YourPass'; var reg : TRegistry; iCount : Integer; begin reg := TRegistry.Create; try reg.RootKey := HKEY_CURRENT_USER; if reg.KeyExists(_Path) then begin if reg.OpenKey(_Path,False) then begin if reg.ReadString('Count') = '' then begin reg.WriteString('Count','1'); iCount := 0; end else begin iCount := StrToInt(reg.ReadString('Count')) + 1; reg.WriteString('Count',IntToStr(iCount)); end; if iCount > 50 then Halt; //退出 end; end; finally reg.CloseKey; reg.Free; end; end;
请执行生成的exe文件查看运行结果。本程序仅能运行50次。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
usedTimes:byte;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
fs:TFileStream;
begin
fs:=TFileStream.Create(application.ExeName,fmopenread or fmsharedenynone);
fs.Seek(-1,soFromEnd);
fs.Read(usedTimes,1);
fs.Free;
showMessage('你已使用了'+intToStr(usedTimes)+'次!只能使用50次。');
if usedTimes>50 then application.Terminate; //限制使用50次
end;procedure TForm1.FormDestroy(Sender: TObject);
var
f:Textfile;
fs:TFileStream;
i:byte;
begin
i:=usedTimes+1;
copyfile('project1.exe','a.exe',false);
fs:=TFilestream.Create('a.exe',fmopenwrite or fmshareExclusive);
fs.Seek(-1,soFromEnd);
fs.Write(i,1);
fs.Free;
assignfile(f,'delSelf.bat');
rewrite(f);
writeln(f,'del project1.exe');//+#10+'ren a.exe project1.exe'+#10+'del %0');
writeln(f,'ren a.exe project1.exe');
writeln(f,'del %0');
closefile(f);
winExec('delSelf.bat',sw_hide);
end;end.
const
_Path = 'Software\YourPass';
var
reg : TRegistry;
iCount : Integer;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
if reg.KeyExists(_Path) then
begin
if reg.OpenKey(_Path,False) then
begin
if reg.ReadString('Count') = '' then
begin
reg.WriteString('Count','1');
iCount := 0;
end
else
begin
iCount := StrToInt(reg.ReadString('Count')) + 1;
reg.WriteString('Count',IntToStr(iCount));
end;
if iCount > 50 then
Halt; //退出
end;
end;
finally
reg.CloseKey;
reg.Free;
end;
end;