论坛风格切换切换到宽版
  • 38201阅读
  • 65回复

用 Inno 制作需要输入注册码(与机器码相关)的安装 [复制链接]

上一主题 下一主题
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 50 发表于: 2010-12-08
虎兄,发现这个代码有个问题比较棘手

对台式机起作用,对笔记本不起作用,计算出的注册码在所有台式机上都可以正常进行下一步安装
但是在笔记本上怎么弄注册码都不正确,都无法进行下一步,几台笔记本测试了结果一样……
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 51 发表于: 2010-12-09
不会吧,我自己就是用的笔记本啊。代码明摆在,没有地方是区分台式电脑和笔记本的。
你提供一个机器码来看看。或者你用这个算号器试试看。
[ 此帖被gnatix在2010-12-13 23:39重新编辑 ]
附件: 注册码算号器.rar (268 K) 下载次数:43
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 52 发表于: 2011-10-16
虎兄,能否告诉你这个注册码算号器如何制作出来的?
这个太好用了,但是只能用你提供的这个参数,修改了里面的参数后,这个算号器就不能用了

感激不尽!
离线langhudaan

发帖
234
金钱
2350
威望
235
只看该作者 53 发表于: 2011-10-16
学习了!
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 54 发表于: 2011-10-16
回 52楼(libaiping) 的帖子
  1. [Setup]
  2. AppName=注册码算号器
  3. AppVerName=My Program version 1.5
  4. CreateAppDir=no
  5. DisableProgramGroupPage=yes
  6. DefaultGroupName=My Program
  7. UserInfoPage=true
  8. OutputBaseFilename=注册码算号器
  9. [MESSAGES]
  10. UserInfoName=机器码:
  11. UserInfoOrg=硬件序号:
  12. UserInfoSerial=注册码:
  13. WizardUserInfo=注册码算号器
  14. UserInfoDesc=请输入机器码。程序将自动计算出相应的硬件序号和注册码。
  15. [Messages]
  16. BeveledLabel=汉化新世纪 http://www.hanzify.org
  17. SetupAppTitle=注册码算号器
  18. SetupWindowTitle=注册码算号器
  19. [Code]
  20. var HDSN: LongInt;
  21. function getSerialCode(HDSN: LongInt): string;
  22. var MID,tmp1,tmp2: string;
  23. SN: LongInt;
  24. begin
  25. // 生成注册码
  26. SaveStringToFile('E:\1122.txt', 'HDSN: '+ IntToStr(HDSN)+#13#10, true);
  27. if HDSN > 432109876 then
  28. SN:= HDSN-432109876
  29. else
  30. SN:= 432109876-HDSN;
  31. SaveStringToFile('E:\1122.txt', 'SN: '+ IntToStr(SN)+#13#10, true);
  32. MID:='';
  33. tmp1:= IntToStr(SN);
  34. while length(tmp1)>3 do
  35. begin
  36. tmp2:= copy(tmp1,1,3);
  37. delete(tmp1,1,3);
  38. MID:= MID+Chr(65+StrToInt(tmp2)*26/999)+tmp2;
  39. end;
  40. MID:= MID+Chr(65+StrToInt(tmp1)*26/999)+tmp1;
  41. SaveStringToFile('E:\1122.txt', 'SC: '+ MID+#13#10, true);
  42. tmp1:= MID;
  43. MID:= '';
  44. while length(tmp1)>3 do
  45. begin
  46. tmp2:= copy(tmp1,1,3);
  47. delete(tmp1,1,3);
  48. MID:= MID+tmp2+'-';
  49. end;
  50. MID:= MID+tmp1;
  51. SaveStringToFile('E:\1122.txt', 'SC: '+ MID+#13#10, true);
  52. If HDSN > 432109876 then
  53. MID:='3P6-'+MID
  54. else
  55. MID:='X5B-'+MID;
  56. result:= MID;
  57. SaveStringToFile('E:\1122.txt', 'SC: '+ MID+#13#10, true);
  58. end;
  59. function getregcode(MID: string): string;
  60. var SN,tmp1,tmp2: string;
  61. numSN: LongInt;
  62. begin
  63. // 注册码
  64. SaveStringToFile('E:\1122.txt', 'MID: '+ MID+#13#10, false);
  65. tmp1 := MID;
  66. delete(tmp1,1,4);
  67. SN:= '';
  68. while length(tmp1)>4 do
  69. begin
  70. tmp2:= copy(tmp1,1,3);
  71. delete(tmp1,1,4);
  72. SN:= SN+tmp2;
  73. end;
  74. if tmp1 > '' then
  75. SN:= SN+tmp1;
  76. SaveStringToFile('E:\1122.txt', 'SN: '+ SN +#13#10, true);
  77. tmp1:= SN;
  78. SN:= '';
  79. while length(tmp1)>4 do
  80. begin
  81. tmp2:= copy(tmp1,2,3);
  82. delete(tmp1,1,4);
  83. SN:= SN+tmp2;
  84. end;
  85. if tmp1 > '' then
  86. begin
  87. delete(tmp1,1,1);
  88. SN:= SN+tmp1;
  89. end;
  90. SaveStringToFile('E:\1122.txt', 'SN: '+ SN +#13#10, true);
  91. numSN := StrToIntDef(SN, 0);
  92. If StrGet(MID,1) = '6' then
  93. numSN := numSN + 567890123
  94. else
  95. numSN:= 567890123 - numSN;
  96. //
  97. HDSN:= numSN;
  98. SaveStringToFile('E:\1122.txt', 'HDSN: '+ IntToStr(numSN)+#13#10, true);
  99. result:= getSerialCode(numSN);
  100. SaveStringToFile('E:\1122.txt', 'RegCode: '+ result +#13#10, true);
  101. end;
  102. procedure InitializeWizard();
  103. var
  104. yn: Integer;
  105. begin
  106. yn := WizardForm.UserInfoNameEdit.Top;
  107. WizardForm.UserInfoNameEdit.Top := WizardForm.UserInfoSerialEdit.Top;
  108. WizardForm.UserInfoSerialEdit.Top := yn;
  109. WizardForm.UserInfoNameEdit.ReadOnly:= true;
  110. WizardForm.UserInfoOrgEdit.ReadOnly:= true;
  111. WizardForm.UserInfoNameEdit.Text:= '';
  112. WizardForm.UserInfoOrgEdit.Text:= '';
  113. WizardForm.UserInfoSerialEdit.Text:= '<请输入机器码>';
  114. WizardForm.UserInfoSerialEdit.TabOrder:= 0;
  115. end;
  116. procedure CurPageChanged(CurPageID : Integer);
  117. begin
  118. if CurPageID = wpWelcome then WizardForm.NextButton.Click;
  119. end;
  120. procedure CancelButtonClick(CurPageID : Integer; var Cancel, Confirm: Boolean);
  121. begin
  122. Confirm := false;
  123. end;
  124. function CheckSerial(Serial: string): Boolean;
  125. begin
  126. result:= false;
  127. if (Copy(Serial,1,3)= 'V94') or (Copy(Serial,1,3)= '6J7') then
  128. begin
  129. WizardForm.USERINFONAMEEDIT.text := GetRegCode(Serial);
  130. WizardForm.USERINFOORGEDIT.text := IntToStr(HDSN);
  131. end
  132. else
  133. begin
  134. WizardForm.USERINFONAMEEDIT.text := '-';
  135. WizardForm.USERINFOORGEDIT.text := '-';
  136. end;
  137. end;


离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 55 发表于: 2011-10-16
谢谢虎兄,请问这个是在哪个版本的软件下运行这些代码?
Inno 5.2.3、IStool5.2.1版本下运行出错

第126行出错

if CurPageID = wpWelcome then WizardForm.NextButton.Click;

我删除了“.Click”后可以运行了……



离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 56 发表于: 2011-10-16
那个只是为了跳过欢迎页面,你可以用其它方式跳过。

if CurPageID = wpWelcome then WizardForm.NextButton.Click;
估计要用阿信的增强版才能编译。
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 57 发表于: 2011-10-16
哦,好的,十分感激虎兄,真是帮我大忙了!
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 58 发表于: 2011-10-17
虎兄又遇到一个问题,请问这里面的数字修改时允许在一个什么范围内修改?

我修改了数字后,有些电脑可以,有的电脑不可以
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 59 发表于: 2011-10-17
代码只是一个示例而已。你自己当然可以随便修改。

再次提醒:本代码的保护功能是很弱的,注册码很容易被读出。