| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 | unit AuthFrm;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ExtCtrls, jpeg;type  TAuthorizeForm = class(TForm)    nbMain: TNotebook;    btnPrev: TButton;    btnNext: TButton;    btnCancel: TButton;    Label1: TLabel;    Panel1: TPanel;    Memo1: TMemo;    Label4: TLabel;    gbManual: TGroupBox;    rbManual: TRadioButton;    gbAuthFile: TGroupBox;    rbAuthFile: TRadioButton;    btnBrowseAuthFile: TButton;    OpenDialog1: TOpenDialog;    leAuthorize: TLabeledEdit;    leAuthFile: TLabeledEdit;    Image1: TImage;    mmFinish: TMemo;    Image2: TImage;    Label3: TLabel;    Label7: TLabel;    Label2: TLabel;    leHaspID: TLabeledEdit;    lblPhone: TLabel;    Label5: TLabel;    Label6: TLabel;    Label8: TLabel;    Label9: TLabel;    Panel3: TPanel;    Image3: TImage;    Label10: TLabel;    lblHint: TLabel;    Panel2: TPanel;    procedure FormCreate(Sender: TObject);    procedure btnCancelClick(Sender: TObject);    procedure nbMainPageChanged(Sender: TObject);    procedure btnPrevClick(Sender: TObject);    procedure btnNextClick(Sender: TObject);    procedure rbAuthFileClick(Sender: TObject);    procedure rbManualClick(Sender: TObject);    procedure btnBrowseAuthFileClick(Sender: TObject);    procedure Label9MouseEnter(Sender: TObject);    procedure Label9MouseLeave(Sender: TObject);    procedure Label9Click(Sender: TObject);  private    { Private declarations }    procedure InternalAuthorize(AFile: string);    procedure InternalAuthorizeByText(AKey: string);    // 0 正确;-1 错误; -2 损坏    function CheckAuthorizeFile(AFile: string): Integer;  public    { Public declarations }  end;function Authorize: Boolean;implementationuses  ScUtils, mEncryptUnit, CryptUtils, ScHaspPwd, ShellAPI;{$R *.dfm}function Authorize: Boolean;var  Form: TAuthorizeForm;begin  {$IFDEF _ScNet}  {$ELSE}  if bAuthorized then  begin    MessageHint(0, '本产品已注册。'#13#10'产品序列号为:' + strHaspID);    Exit;  end;  Form := TAuthorizeForm.Create(nil);  try    Result := Form.ShowModal = mrOK;  finally    Form.Free;  end;  {$ENDIF}end;const  strWelcome = '尊敬的用户:'#13#10#13#10 +               '    感谢您购买《纵横SmartCost工程造价管理系统》!'#13#10#13#10 +               '    您现在可以开始使用本系统,为了保障您的权益,客服中心将有专人与您联系,以完成产品的注册。'#13#10#13#10 +               '    在完成注册前,本产品可以正常使用50次或200小时,在这段时间内,若未完成注册,请查询“帮助->产品注册”菜单,以完成注册,或咨询客服中心。'#13#10#13#10#13#10#13#10 +               '    点击“下一步”开始注册。';  strSuccess = '恭喜您!您已经注册成功!'#13#10#13#10'请重新运行程序即可正常使用软件。';  strFailed = '注册失败,请确认您的软件合法性,以及产品编号的正确性。'#13#10#13#10'详情请咨询客服中心。';procedure TAuthorizeForm.FormCreate(Sender: TObject);begin  nbMain.PageIndex := 0;  Memo1.Lines.Clear;  Memo1.Text := Format(strWelcome, [LoadAuthorizePhone]);  lblPhone.Caption := LoadAuthorizePhone;  leHaspID.Text := strHaspID;end;procedure TAuthorizeForm.btnCancelClick(Sender: TObject);begin  ModalResult := mrCancel;  Close;end;procedure TAuthorizeForm.nbMainPageChanged(Sender: TObject);begin  if nbMain.PageIndex = 0 then    btnPrev.Enabled := False  else    btnPrev.Enabled := True;  if nbMain.PageIndex = nbMain.Pages.Count - 1 then  begin    btnPrev.Enabled := False;    btnNext.Enabled := True;    btnNext.Caption := '完成(&O)';    btnCancel.Enabled := False;  end;  case nbMain.PageIndex of    0:      lblHint.Caption := '产品注册概述';    1:      lblHint.Caption := '注册方式提示';    2:      lblHint.Caption := '进行注册';    3:      lblHint.Caption := '完成注册';  end;end;procedure TAuthorizeForm.btnPrevClick(Sender: TObject);begin  nbMain.PageIndex := nbMain.PageIndex - 1;end;procedure TAuthorizeForm.btnNextClick(Sender: TObject);begin  case nbMain.PageIndex of    2:    begin      if rbAuthFile.Checked then      begin        if not FileExists(leAuthFile.Text) then        begin          MessageHint(0, '指定的注册文件不存在,请重新选择。');          Exit;        end        else if CheckAuthorizeFile(leAuthFile.Text) < 0 then        begin          MessageHint(0, '指定的注册文件不是有效的SmartCost注册文件,请重新选择。');          Exit;        end;        InternalAuthorize(leAuthFile.Text);      end      else if rbManual.Checked then      begin        if leAuthorize.Text = '' then        begin          MessageHint(0, '请输入注册码。');          Exit;        end;        InternalAuthorizeByText(leAuthorize.Text);      end;      if bAuthorized then      begin        mmFinish.Text := strSuccess;        Image1.Visible := True;        Image2.Visible := False;      end      else      begin        mmFinish.Text := strFailed;        Image1.Visible := False;        Image2.Visible := True;      end;    end;    3:    begin      ModalResult := mrOK;      Close;    end;  end;  nbMain.PageIndex := nbMain.PageIndex + 1;end;procedure TAuthorizeForm.rbAuthFileClick(Sender: TObject);begin  rbManual.Checked := False;  leAuthFile.Enabled := True;  btnBrowseAuthFile.Enabled := True;  leAuthorize.Enabled := False;  leAuthFile.SetFocus;end;procedure TAuthorizeForm.rbManualClick(Sender: TObject);begin  rbAuthFile.Checked := False;  leAuthFile.Enabled := False;  btnBrowseAuthFile.Enabled := False;  leAuthorize.Enabled := True;  leAuthorize.SetFocus;end;procedure TAuthorizeForm.InternalAuthorize(AFile: string);var  Key: array [0..1023] of Byte;  fsFile: TFileStream;begin  fsFile := TFileStream.Create(AFile, fmOpenRead);  try    fsFile.Read(Key, fsFile.Size);  finally    fsFile.Free;  end;  UserAuthorize(Key);end;procedure TAuthorizeForm.btnBrowseAuthFileClick(Sender: TObject);begin  if OpenDialog1.Execute then    leAuthFile.Text := OpenDialog1.FileName;end;function TAuthorizeForm.CheckAuthorizeFile(AFile: string): Integer;var  fsFile: TFileStream;  rFile: PAuthorizeFile;begin{  fsFile := TFileStream.Create(AFile, fmOpenRead);  New(rFile);  ZeroMemory(rFile, SizeOf(TAuthorizeFile));  try    fsFile.Read(rFile^, SizeOf(TAuthorizeFile));    if SameText(rFile.Head, HASP_AuthorizeFileHead) then      Result := 1    else      Result := -1;  finally    Dispose(rFile);    fsFile.Free;  end;//}  Result := 1;end;procedure TAuthorizeForm.InternalAuthorizeByText(AKey: string);var  Key: array [0..1023] of Byte;  fsFile: TFileStream;  I: Integer;begin//  if Length(AKey) <> Length_AuthorizeFile * 2 then//    Exit;  for I := 0 to (Length(AKey) div 2 - 1) do  begin    Key[I] := StrToInt('$' + AKey[2 * I + 1] + AKey[2 * I + 2]);  end;  UserAuthorize(Key);end;procedure TAuthorizeForm.Label9MouseEnter(Sender: TObject);begin  TLabel(Sender).Font.Color := clHighLight;  Screen.Cursor := crHandPoint;end;procedure TAuthorizeForm.Label9MouseLeave(Sender: TObject);begin  TLabel(Sender).Font.Color := clHotLight;  Screen.Cursor := crDefault;end;procedure TAuthorizeForm.Label9Click(Sender: TObject);begin  Shellexecute(Handle, 'open', PChar(Format('mailto:"纵横产品注册中心"<support@smartcost.com.cn>?subject=SmartCost注册,序列号[%s]', [strHaspID])), 'SmartCost软件锁注册', '', SW_SHOW);end;end.
 |