求改注册表限制用户只能用100次的代码 (加急在线中)!!!
解决方案 »
- 哪有dbgrdieh控件分组,过滤,查找功能的代码或者案例,类似cxgrid
- 版主 !delphi解包,急救 !
- 读取二进制文件时,如何将指针指到符合条件的位置
- 大家有什么办法快速更新cxgrid啊
- 表格上多行数据转移有错误,请高手帮忙!急啊!
- delphi QQ群号:2881605,欢迎大家加入共同学习
- 【大家好,我有几个关于创业的问题,希望有创业经验,或是现在在开公司的朋友们给一些建议?】
- 按钮事件中加入一行文本改变执行语句怎么加
- 关于ADOQUERY的问题??
- 布尔型如何转换成字符型?
- 裸体脆求线程与数据库相关的问题,高手请进!!!
- 请问各位大虾:如何把cookie内容加入Tidhttp.post中?!
var
Reg:TRegistry;
RInt,SizeInt:Integer;
FileStr,UNStr,SNStr,RStr1,RStr2,RStr3,SerialStr:String;
SumInt:Integer;
Str:String;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE; if reg.OpenKey('\SoftWare\Microsoft\JesionSoft',True) then
begin
RStr1:=Reg.ReadString('JesUN');
RStr2:=Reg.ReadString('JesSN');
RStr3:=Reg.ReadString('JesSerial');
end;
reg.CloseKey; if (RStr1<>'') and (RStr2<>'') then
begin
UNStr:=JesionDD(RStr1,'shihongchun');
SNStr:=JesionDD(RStr2,'shihongchun');
SerialStr:=JesionDD(RStr3,'shihongchun');
if ShlStr(SNStr)=ShlStr(leftStr(JesionM(RightStr(JesionCodeEn(PChar(UNStr+SerialStr),'Key1','Key2','Key3','Key4','Key5','Key6'),30)),20)) then //进行非明码比较;
//在这里还有很多算法你可以使用。具体可以看JFunction单元。里面有函数接口。
begin
if ShlStr(CheckFile())=ShlStr(RightStr(JesionBM(UNStr),8)) then
begin
//这里写上注册成功以后要做的事情,比如把功能限制取消。
//在这里我只是把"注册认证"按钮变会。
JesionFrm.Button1.Enabled:=False;
end;
end
else
begin//对软件进行次数限制;
if Reg.OpenKey('\SoftWare\Microsoft\JesionSoft',True) then
Str:=Reg.ReadString('JesKENC');
Reg.CloseKey;
if Str='' then//判断次数是否为空,如果为空那么写入1;
begin
if Reg.OpenKey('\SoftWare\Microsoft\JesionSoft',True) then
Reg.WriteString('JesKENC','1919F0CF019DBB3E'); //1919F0CF019DBB3E是经过加密后的字符串,原值为1;
Reg.CloseKey;
end
else
begin
SumInt:=StrToInt(JesionDd(Str,'shihongchun')); //读取次数
SumInt:=SumInt+StrToInt(JesionDD('1919F0CF019DBB3E','shihongchun'));//对次数进行相加;
if SumInt>StrToInt(JesionDD('728DA73436100E6C','shihongchun')) then //判断次数是否等于30次;
begin//下面可以设置次数到期限制一些功能;
MessageBox(JesionFrm.Handle,'您好!软件的使用次数已到,请注册正式版!','注册提示',MB_OK+MB_ICONINFORMATION);
end
else
begin//如果次数不到期,那么继续对次数的植进行相加;
if Reg.OpenKey('\SoftWare\Microsoft\JesionSoft',True) then
Reg.WriteString('JesKENC',JesionD(IntToStr(SumInt),'shihongchun'));
Reg.CloseKey;
end;
end;
end;
end
else
begin
if Reg.OpenKey('\SoftWare\Microsoft\JesionSoft',True) then
Str:=Reg.ReadString('JesKENC');
Reg.CloseKey;
if Str='' then
begin
if Reg.OpenKey('\SoftWare\Microsoft\JesionSoft',True) then
Reg.WriteString('JesKENC','1919F0CF019DBB3E');
Reg.CloseKey;
end
else
begin
SumInt:=StrToInt(JesionDD(Str,'shihongchun'));
SumInt:=SumInt+StrToInt(JesionDD('1919F0CF019DBB3E','shihongchun'));
if SumInt>StrToInt(JesionDD('728DA73436100E6C','shihongchun')) then
begin
MessageBox(JesionFrm.Handle,'您好!软件的使用次数已到,请注册正式版!','注册提示',MB_OK+MB_ICONINFORMATION);
end
else
begin
if Reg.OpenKey('\SoftWare\Microsoft\JesionSoft',True) then
Reg.WriteString('JesKENC',JesionD(IntToStr(SumInt),'shihongchun'));
Reg.CloseKey;
end;
end;
end;
end;
uses
Registry;const
CKeyName = 'EncryptReg';function TMainForm.InstallRegInfo: Boolean;
var
Reg: TRegistry;
G: TGuid;
sGuid: string;
begin
Result := False;
Reg := TRegistry.Create;
try
with Reg do
begin
RootKey := HKEY_CLASSES_ROOT;
if KeyExists(CKeyName) then
begin // 检测是否已经存在键名了
Result := False;
Exit;
end
else
begin
if not CreateKey(CKeyName) then
begin // 创建主键名——相当于文件夹
Result := False;
Exit;
end
else
begin
if not OpenKey(CKeyName, False) then
begin // 创建保存使用次数的键名
Result := False;
Exit;
end
else
begin // 创建GUID并写入键值
CreateGuid(G);
sGuid := GuidToString(G); // 注意:sGuid中包括'{}'符号
sGuid[8] := '0';
sGuid[9] := '0'; // 从左到右,第8和9位作为计数器,将他们置零
WriteString(GuidToString(G), sGuid);
Result := True;
end;
end;
end;
end;
finally
FreeAndNil(Reg);
end;
end;procedure TMainForm.UninstallRegInfo;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
with Reg do
begin
RootKey := HKEY_CLASSES_ROOT;
if not DeleteKey(CKeyName) then
raise Exception.Create('Can''t delete registry info');
end;
finally
FreeAndNil(Reg);
end;end;procedure TMainForm.IncreaseUsedTime;
var
Reg: TRegistry;
sTime: string;
iTime: Integer;
sKeyName: string;
KeyNameList: TStringList;
begin
Reg := TRegistry.Create;
KeyNameList := TStringList.Create;
try
with Reg do
begin
RootKey := HKEY_CLASSES_ROOT;
if not KeyExists(CKeyName) then
raise Exception.Create('Missing registry info, program can''t run!')
else
begin
if not OpenKey(CKeyName, False) then
raise Exception.Create('Can''t read registry info, program can''t run!')
else
begin
GetValueNames(KeyNameList); // 读取GUID键名,因为GUID是随机生成的。
if KeyNameList.Count <= 0 then
raise Exception.Create('Not found regsitry key!')
else
begin
sKeyName := KeyNameList.Strings[0]; // 因为只有一个键,所有读取索引为0的字符串就是我们想要的那个键值。
sTime := ReadString(sKeyName);
if Length(Trim(sTime)) <> 38 then
raise Exception.Create('Registry value error!')
else
begin
iTime := HexToInt(sTime[8])*16 + HexToInt(sTime[9]);
if iTime > 30 then
raise Exception.Create('Thirty times is used. Please register!')
else
begin
Inc(iTime);
sTime[8] := IntToHex(iTime div 16);
sTime[9] := IntToHex(iTime mod 16);
WriteString(sKeyName, sTime);
end;
end;
end;
CloseKey;
end;
end;
end;
finally
FreeAndNil(KeyNameList);
FreeAndNil(Reg);
end;
end;function TMainForm.HexToInt(const cHex: Char): Byte;
begin
case cHex of
'0'..'9': Result := StrToInt(cHex);
'a', 'A': Result := 10;
'b', 'B': Result := 11;
'c', 'C': Result := 12;
'd', 'D': Result := 13;
'e', 'E': Result := 14;
'f', 'F': Result := 15;
else
Result := 0;
end;
end;function TMainForm.IntToHex(const iInt: Integer): Char;
begin
case iInt of
0: Result := '0';
1: Result := '1';
2: Result := '2';
3: Result := '3';
4: Result := '4';
5: Result := '5';
6: Result := '6';
7: Result := '7';
8: Result := '8';
9: Result := '9';
10: Result := 'A';
11: Result := 'B';
12: Result := 'C';
13: Result := 'D';
14: Result := 'E';
15: Result := 'F';
else
Result := ' ';
end;
end;