ScAuthFrm.pas 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. unit ScAuthFrm;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, ExtCtrls, jpeg;
  6. type
  7. TAuthorizeForm = class(TForm)
  8. nbMain: TNotebook;
  9. btnPrev: TButton;
  10. btnNext: TButton;
  11. btnCancel: TButton;
  12. Label1: TLabel;
  13. Panel1: TPanel;
  14. Memo1: TMemo;
  15. Label4: TLabel;
  16. gbManual: TGroupBox;
  17. rbManual: TRadioButton;
  18. gbAuthFile: TGroupBox;
  19. rbAuthFile: TRadioButton;
  20. btnBrowseAuthFile: TButton;
  21. OpenDialog1: TOpenDialog;
  22. leAuthorize: TLabeledEdit;
  23. leAuthFile: TLabeledEdit;
  24. Image1: TImage;
  25. mmFinish: TMemo;
  26. Image2: TImage;
  27. Label3: TLabel;
  28. Label7: TLabel;
  29. Label2: TLabel;
  30. leHaspID: TLabeledEdit;
  31. lblPhone: TLabel;
  32. Label5: TLabel;
  33. Label6: TLabel;
  34. Label8: TLabel;
  35. Label9: TLabel;
  36. Panel3: TPanel;
  37. Image3: TImage;
  38. Label10: TLabel;
  39. lblHint: TLabel;
  40. Panel2: TPanel;
  41. procedure FormCreate(Sender: TObject);
  42. procedure btnCancelClick(Sender: TObject);
  43. procedure nbMainPageChanged(Sender: TObject);
  44. procedure btnPrevClick(Sender: TObject);
  45. procedure btnNextClick(Sender: TObject);
  46. procedure rbAuthFileClick(Sender: TObject);
  47. procedure rbManualClick(Sender: TObject);
  48. procedure btnBrowseAuthFileClick(Sender: TObject);
  49. procedure Label9MouseEnter(Sender: TObject);
  50. procedure Label9MouseLeave(Sender: TObject);
  51. procedure Label9Click(Sender: TObject);
  52. private
  53. { Private declarations }
  54. procedure InternalAuthorize(AFile: string);
  55. procedure InternalAuthorizeByText(AKey: string);
  56. // 0 正确;-1 错误; -2 损坏
  57. function CheckAuthorizeFile(AFile: string): Integer;
  58. public
  59. { Public declarations }
  60. end;
  61. function Authorize: Boolean;
  62. implementation
  63. uses
  64. ScUtils, ScEncryptUnit, CryptUtils, ScHaspPwd, ShellAPI;
  65. {$R *.dfm}
  66. function Authorize: Boolean;
  67. var
  68. Form: TAuthorizeForm;
  69. begin
  70. {$IFDEF _ScNet}
  71. {$ELSE}
  72. if bAuthorized then
  73. begin
  74. MessageHint(0, '本产品已注册。'#13#10'产品序列号为:' + strHaspID);
  75. Exit;
  76. end;
  77. Form := TAuthorizeForm.Create(nil);
  78. try
  79. Result := Form.ShowModal = mrOK;
  80. finally
  81. Form.Free;
  82. end;
  83. {$ENDIF}
  84. end;
  85. const
  86. strWelcome = '尊敬的用户:'#13#10#13#10 +
  87. ' 感谢您购买《纵横SmartCost工程造价管理系统》!'#13#10#13#10 +
  88. ' 您现在可以开始使用本系统,为了保障您的权益,客服中心将有专人与您联系,以完成产品的注册。'#13#10#13#10 +
  89. ' 在完成注册前,本产品可以正常使用50次或200小时,在这段时间内,若未完成注册,请查询“帮助->产品注册”菜单,以完成注册,或咨询客服中心。'#13#10#13#10#13#10#13#10 +
  90. ' 点击“下一步”开始注册。';
  91. strSuccess = '恭喜您!您已经注册成功!'#13#10#13#10'请重新运行程序即可正常使用软件。';
  92. strFailed = '注册失败,请确认您的软件合法性,以及产品编号的正确性。'#13#10#13#10'详情请咨询客服中心。';
  93. procedure TAuthorizeForm.FormCreate(Sender: TObject);
  94. begin
  95. nbMain.PageIndex := 0;
  96. Memo1.Lines.Clear;
  97. Memo1.Text := Format(strWelcome, [LoadAuthorizePhone]);
  98. lblPhone.Caption := LoadAuthorizePhone;
  99. leHaspID.Text := strHaspID;
  100. end;
  101. procedure TAuthorizeForm.btnCancelClick(Sender: TObject);
  102. begin
  103. ModalResult := mrCancel;
  104. Close;
  105. end;
  106. procedure TAuthorizeForm.nbMainPageChanged(Sender: TObject);
  107. begin
  108. if nbMain.PageIndex = 0 then
  109. btnPrev.Enabled := False
  110. else
  111. btnPrev.Enabled := True;
  112. if nbMain.PageIndex = nbMain.Pages.Count - 1 then
  113. begin
  114. btnPrev.Enabled := False;
  115. btnNext.Enabled := True;
  116. btnNext.Caption := '完成(&O)';
  117. btnCancel.Enabled := False;
  118. end;
  119. case nbMain.PageIndex of
  120. 0:
  121. lblHint.Caption := '产品注册概述';
  122. 1:
  123. lblHint.Caption := '注册方式提示';
  124. 2:
  125. lblHint.Caption := '进行注册';
  126. 3:
  127. lblHint.Caption := '完成注册';
  128. end;
  129. end;
  130. procedure TAuthorizeForm.btnPrevClick(Sender: TObject);
  131. begin
  132. nbMain.PageIndex := nbMain.PageIndex - 1;
  133. end;
  134. procedure TAuthorizeForm.btnNextClick(Sender: TObject);
  135. begin
  136. case nbMain.PageIndex of
  137. 2:
  138. begin
  139. if rbAuthFile.Checked then
  140. begin
  141. if not FileExists(leAuthFile.Text) then
  142. begin
  143. MessageHint(0, '指定的注册文件不存在,请重新选择。');
  144. Exit;
  145. end
  146. else if CheckAuthorizeFile(leAuthFile.Text) < 0 then
  147. begin
  148. MessageHint(0, '指定的注册文件不是有效的SmartCost注册文件,请重新选择。');
  149. Exit;
  150. end;
  151. InternalAuthorize(leAuthFile.Text);
  152. end
  153. else if rbManual.Checked then
  154. begin
  155. if leAuthorize.Text = '' then
  156. begin
  157. MessageHint(0, '请输入注册码。');
  158. Exit;
  159. end;
  160. InternalAuthorizeByText(leAuthorize.Text);
  161. end;
  162. if bAuthorized then
  163. begin
  164. mmFinish.Text := strSuccess;
  165. Image1.Visible := True;
  166. Image2.Visible := False;
  167. end
  168. else
  169. begin
  170. mmFinish.Text := strFailed;
  171. Image1.Visible := False;
  172. Image2.Visible := True;
  173. end;
  174. end;
  175. 3:
  176. begin
  177. ModalResult := mrOK;
  178. Close;
  179. end;
  180. end;
  181. nbMain.PageIndex := nbMain.PageIndex + 1;
  182. end;
  183. procedure TAuthorizeForm.rbAuthFileClick(Sender: TObject);
  184. begin
  185. rbManual.Checked := False;
  186. leAuthFile.Enabled := True;
  187. btnBrowseAuthFile.Enabled := True;
  188. leAuthorize.Enabled := False;
  189. leAuthFile.SetFocus;
  190. end;
  191. procedure TAuthorizeForm.rbManualClick(Sender: TObject);
  192. begin
  193. rbAuthFile.Checked := False;
  194. leAuthFile.Enabled := False;
  195. btnBrowseAuthFile.Enabled := False;
  196. leAuthorize.Enabled := True;
  197. leAuthorize.SetFocus;
  198. end;
  199. procedure TAuthorizeForm.InternalAuthorize(AFile: string);
  200. var
  201. Key: array [0..1023] of Byte;
  202. fsFile: TFileStream;
  203. begin
  204. fsFile := TFileStream.Create(AFile, fmOpenRead);
  205. try
  206. fsFile.Read(Key, fsFile.Size);
  207. finally
  208. fsFile.Free;
  209. end;
  210. UserAuthorize(Key);
  211. end;
  212. procedure TAuthorizeForm.btnBrowseAuthFileClick(Sender: TObject);
  213. begin
  214. if OpenDialog1.Execute then
  215. leAuthFile.Text := OpenDialog1.FileName;
  216. end;
  217. function TAuthorizeForm.CheckAuthorizeFile(AFile: string): Integer;
  218. var
  219. fsFile: TFileStream;
  220. rFile: PAuthorizeFile;
  221. begin
  222. { fsFile := TFileStream.Create(AFile, fmOpenRead);
  223. New(rFile);
  224. ZeroMemory(rFile, SizeOf(TAuthorizeFile));
  225. try
  226. fsFile.Read(rFile^, SizeOf(TAuthorizeFile));
  227. if SameText(rFile.Head, HASP_AuthorizeFileHead) then
  228. Result := 1
  229. else
  230. Result := -1;
  231. finally
  232. Dispose(rFile);
  233. fsFile.Free;
  234. end;
  235. //} Result := 1;
  236. end;
  237. procedure TAuthorizeForm.InternalAuthorizeByText(AKey: string);
  238. var
  239. Key: array [0..1023] of Byte;
  240. fsFile: TFileStream;
  241. I: Integer;
  242. begin
  243. // if Length(AKey) <> Length_AuthorizeFile * 2 then
  244. // Exit;
  245. for I := 0 to (Length(AKey) div 2 - 1) do
  246. begin
  247. Key[I] := StrToInt('$' + AKey[2 * I + 1] + AKey[2 * I + 2]);
  248. end;
  249. UserAuthorize(Key);
  250. end;
  251. procedure TAuthorizeForm.Label9MouseEnter(Sender: TObject);
  252. begin
  253. TLabel(Sender).Font.Color := clHighLight;
  254. Screen.Cursor := crHandPoint;
  255. end;
  256. procedure TAuthorizeForm.Label9MouseLeave(Sender: TObject);
  257. begin
  258. TLabel(Sender).Font.Color := clHotLight;
  259. Screen.Cursor := crDefault;
  260. end;
  261. procedure TAuthorizeForm.Label9Click(Sender: TObject);
  262. begin
  263. Shellexecute(Handle, 'open', PChar(Format('mailto:"纵横产品注册中心"<support@smartcost.com.cn>?subject=SmartCost注册,序列号[%s]', [strHaspID])), 'SmartCost软件锁注册', '', SW_SHOW);
  264. end;
  265. end.