软件最后试用日期是指限制用户只能试用软件到指定日期,如果超过了这个指定日期就不能继续试用了,需要注册购买后方可继续使用。软件最后试用日期限制是软件试用天数限制的一种变形,软件最后试用日期是给定了一个最后日期,也就是只能使用从第一次使用到软件到给定的最后试用日期之间的这些天数。比如第一次开始用软件是2021年5月2日开始,那么试用到期日为2021年5月12日。其实也就是限定软件只能试用10天。
软件最后试用日期的实现思路如下:
1) 软件启动时,从注册表或文件里面读取限制信息。如果信息为空,那么说明是第一次使用软件;将当前系统日期加密后存储到注册表或文件中。
2) 如不是第一次启动,存在以下几种情况:
i. 当前系统日期<存储值,表明使用者调整过系统日期,提示使用者试用期已到。
ii. 当前系统日期=存储值,则表明当天是最后使用期限,可继续使用软件
iii.当前系统日期>=最后期限日期,表明试用期限已到,不可使用软件
iv.最后期限日期> or =最后期限日期,表明试用期限已到,软件不可试用
v. 给定日期 <=最后期限日期,且当前系统日期比存储值新,将当前日期存储到注册表或文件中,软件可正常使用。
实现限制软件使用日期的完整示例代码如下:
unit LastDateUnit;
interface
uses Base64Unit,System.Win.Registry,Vcl.Controls,Winapi.Windows,System.SysUtils;
function GetLastDate(LastDate:TDate):Integer;
implementation
//==============================================================================
// 将日期写入到注册表
//作者:键盘记忆
//日期:2021年5月2日11点49分
//==============================================================================
function GetLastDate(LastDate:TDate):Integer;
var
Reg:TRegistry;
RegStr,TempStr:String;
begin
Reg := '';
TempStr := '';
try
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
RegStr := 'SoftWare\Trial';
if Reg.OpenKey(RegStr,False) then
begin
TempStr := Reg.ReadString('TLastDate');
end;
Reg.CloseKey;
if TempStr = '' then
begin
if Reg.OpenKey(RegStr,False) then
Reg.WriteString('TLastDate',Base64Encryption(DateToStr(Date)));
Reg.CloseKey;
Result := 0;
end
else
begin
// 当前系统日期<存储值,表明使用者调整过系统日期,提示使用者试用期已到。
if Date < StrToDate(Base64Decryption(TempStr)) then
begin
if reg.OpenKey(RegStr,False) then
Reg.OpenKey('TLastDate',Base64Encryption(DateToStr(LastDate)));
Reg.CloseKey;
Result := 1;
Exit;
end;
//
if StrToDate(Base64Decryption(TempStr)) >= LastDate then
begin
Result := 1;
Exit;
end;
if Date > LastDate then
begin
if Reg.OpenKey(RegStr,False) then
begin
Reg.WriteString('TLastDate',Base64Encryption(DateToStr(LastDate)));
end;
Reg.CloseKey;
Result := 1;
Exit;
end;
//当前系统日期=存储值,则表明当天是最后使用期限,可继续使用软件
if Date = StrToDate(Base64Decryption(TempStr)) then
begin
Result := 0;
Exit;
end;
Result := 0;
if Reg.OpenKey(RegStr,False) then
Reg.WriteString('TLastDate',Base64Encryption(DateToStr(Date)));
Reg.CloseKey;
end;
Reg.Destroy;
except
Result := -1;
end;
end;
end.