⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comsdktest.pas

📁 中控嵌入式指纹识别开发描述
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit comsdktest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, zkemkeeper_TLB, Menus, Buttons, Grids,
  ValEdit, ExtCtrls;

type
  TForm1 = class(TForm)
    CZKEM1: TCZKEM;
    Label1: TLabel;
    btnConnect: TButton;
    Memo1: TMemo;
    SaveDialog1: TSaveDialog;
    gbOP: TGroupBox;
    btnSetTime: TButton;
    vleDevInfo: TValueListEditor;
    btnLoadDevInfo: TBitBtn;
    btnSaveDevInfo: TBitBtn;
    Button3: TButton;
    GroupBox1: TGroupBox;
    btnClearData: TButton;
    Button5: TButton;
    Button6: TButton;
    btnBackupUser: TButton;
    btnRestore: TButton;
    Button9: TButton;
    OpenDialog1: TOpenDialog;
    btnDeleteUser: TButton;
    btnSetName: TButton;
    Button10: TButton;
    btnAutoTest: TButton;
    edtNetAddress: TLabeledEdit;
    edtNetPort: TLabeledEdit;
    edtBaudRate: TEdit;
    sbtnRS232: TSpeedButton;
    sbtnTCPIP: TSpeedButton;
    Label5: TLabel;
    btnACUnlock: TButton;
    edtPassword: TEdit;
    Label2: TLabel;
    chkEnabled: TCheckBox;
    Button7: TButton;
    Button8: TButton;
    Button12: TButton;
    Button11: TButton;
    Button14: TButton;
    Button13: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    Button19: TButton;
    Button20: TButton;
    btnSMS: TButton;
    Button1: TButton;
    SaveDialog2: TSaveDialog;
    OpenDialog2: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure btnConnectClick(Sender: TObject);
    procedure btnLoadDevInfoClick(Sender: TObject);
    procedure btnSaveDevInfoClick(Sender: TObject);
    procedure btnSetTimeClick(Sender: TObject);
    procedure btnClearDataClick(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure btnBackupUserClick(Sender: TObject);
    procedure btnRestoreClick(Sender: TObject);
    procedure vleDevInfoValidate(Sender: TObject; ACol, ARow: Integer;
      const KeyName, KeyValue: String);
    procedure btnSetNameClick(Sender: TObject);
    procedure btnDeleteUserClick(Sender: TObject);
    procedure btnAutoTestClick(Sender: TObject);
    procedure sbtnRS232Click(Sender: TObject);
    procedure sbtnTCPIPClick(Sender: TObject);
    procedure btnACUnlockClick(Sender: TObject);
    procedure chkEnabledClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure btnSMSClick(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure CZKEM1FingerFeature(ASender: TObject; Score: Integer);
    procedure CZKEM1Verify(ASender: TObject; UserID: Integer);
    procedure Button19Click(Sender: TObject);
    procedure Button20Click(Sender: TObject);
  private
    { Private declarations }
    DevID: integer;
    Commport: integer;
    Modified: string;
    AppPath:string;
    procedure AddInfo(const s: string);
    procedure ReadDeviceStatus;
    procedure BackupUser(const fn: string);
    procedure RestoreUser(const fn: string);
    function SaveGLogs(const fn: string): integer;
    function BTimeEncode(MinuteSecond: integer): string;
    function BTimeDecode(const TimeStr: string): integer;
    function BNetSpeedEncode(speed: integer): string;
    function BNetSpeedDecode(const speed: string): integer;    
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
function decodedata(const s: string): string;
function encodedata(const BinData; size: integer): string;
function LoadFile(const fn: string): string;
procedure SaveFileData(const fn: string; const Data; size: integer);
procedure SaveFile(const fn: string; Data: string);

implementation
uses inifiles, uUser;
{$R *.dfm}
const
  HexOfNum: array[0..15] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');

  StatusNames: array[1..12] of string=(
    'Tatal administrator',
    'Tatal users',
    'Tatal FP',
    'Tatal Password',
    'Tatal manage record',
    'Tatal In and out record',
    'Nominal FP number',
    'Nominal user number',
    'Nominal In and out record number',
    'Remain FP number',
    'Remain user number',
    'Remain In and out record number');
  Languages: array[0..2] of string=(
    'English',
    'Simplified Chinese',
    'Traditional Chinese');
  BaudRates: array[0..6] of string=(
    '1200 bps',
    '2400 bps',
    '4800 bps',
    '9600 bps',
    '19200 bps',
    '38400 bps',
    '115200 bps');
  CRCs: array[0..2] of string=(
    'Nothing',
    'Even',
    'Odd');
  StopBits: array[0..1] of string=(
    'One',
    'Two');
  DateSps: array[0..1] of string=(
    '"/"',
    '"-"');
  MSpeeds: array[0..2] of string=(
    'Low speed',
    'High speed',
    'Auto');
  OnOffs: array[0..1] of string=(
    'Off',
    'On');
  YesNos: array[0..1] of string=(
    'No',
    'Yes');
  DateFormats: array[0..9] of string=(
    'YY-MM-DD','YY/MM/DD','YY.MM.DD',
    'MM-DD-YY','MM/DD/YY','MM.DD.YY',
    'DD-MM-YY','DD/MM/YY','DD.MM.YY',
    'YYYYMMDD');
  NetSpeeds: array[0..4] of string=
    ('10M_H','100M_H','10M_F','100M_F','AUTO');
  NetSpeedValues: array[0..4] of integer=(0,1,4,5,8);

procedure TForm1.FormCreate(Sender: TObject);
var
  s: widestring;
  i,j: integer;
begin

  AppPath:= ExtractFilePath(application.exename);
  CZKEM1.GetSDKVersion(s);
  label1.Caption := s;

  vleDevInfo.ItemProps[2].EditStyle := esPickList;
  for i:=0 to length(Languages)-1 do
    vleDevInfo.ItemProps[2].PickList.Add(Languages[i]);

   vleDevInfo.ItemProps[8].EditStyle := esPickList;
  for i:=0 to length(BaudRates)-1 do
    vleDevInfo.ItemProps[8].PickList.Add(BaudRates[i]);

  vleDevInfo.ItemProps[9].EditStyle := esPickList;
  for i:=0 to length(CRCs)-1 do
    vleDevInfo.ItemProps[9].PickList.Add(CRCs[i]);

  vleDevInfo.ItemProps[10].EditStyle := esPickList;
  for i:=0 to length(StopBits)-1 do
    vleDevInfo.ItemProps[10].PickList.Add(StopBits[i]);

  vleDevInfo.ItemProps[11].EditStyle := esPickList;
  for i:=0 to length(DateSps)-1 do
    vleDevInfo.ItemProps[11].PickList.Add(DateSps[i]);

  for j := 12 to 15 do
  begin
    vleDevInfo.ItemProps[j].EditStyle := esPickList;
    for i:=0 to length(OnOffs)-1 do
      vleDevInfo.ItemProps[j].PickList.Add(OnOffs[i]);
  end;

  vleDevInfo.ItemProps[16].EditStyle := esPickList;
  for i:=0 to length(MSpeeds)-1 do
    vleDevInfo.ItemProps[16].PickList.Add(MSpeeds[i]);
end;

function LoadFile(const fn: string): string;
var
  f: tmemorystream;
begin
  result := '';
  f := tmemorystream.Create;
  try
    f.LoadFromFile(fn);
    f.Position := 0;
    if f.Size>0 then
    begin
      setlength(result, f.size);
      f.Read(result[1], length(result));
    end;
  finally
    f.Free;
  end;
end;

procedure SaveFile(const fn: string; Data: string);
var
  f: tmemorystream;
begin
  f := tmemorystream.Create;
  try
    if length(data)>0 then
      f.Write(Data[1], length(data));
    f.Position := 0;
    f.SaveToFile(fn);
  finally
    f.Free;
  end;
end;

procedure SaveFileData(const fn: string; const Data; size: integer);
var
  f: tmemorystream;
begin
  f := tmemorystream.Create;
  try
    if size>0 then
      f.Write(Data, size);
    f.Position := 0;
    f.SaveToFile(fn);
  finally
    f.Free;
  end;
end;

procedure TForm1.btnConnectClick(Sender: TObject);
var
  ErrorCode: integer;
  c: boolean;
begin
  if btnConnect.Tag = 1 then
  begin
    CZKEM1.RefreshData(DevId);
    CZKEM1.EnableDevice(DevId, TRUE);
    CZKEM1.Disconnect;
    btnConnect.Tag := 0;
    btnConnect.Caption := 'Connect';
  end
  else
  begin
    devid:=strtoint(edtNetPort.Text);
    if edtPassword.Text>'' then
      CZKEM1.SetCommPassword(strtoint(edtPassword.Text));    
    if pos('COM', uppercase(edtNetAddress.text))=1 then
    begin
      commport:=ord(edtNetAddress.text[4])-ord('0');
      CZKEM1.CommPort := commport;
      c:=CZKEM1.Connect_Com(commport, DevID, strtoint(edtBaudRate.text));
    end
    else
    begin
      c:=CZKEM1.Connect_net(edtNetAddress.text, Devid);
      Devid:=1;
    end;                                                                    
    if c then
    begin
      AddInfo('Device Connected.');
      ReadDeviceStatus;
      btnConnect.Tag := 1;
      btnConnect.Caption := 'Disconnect';
    end
    else
    begin
      CZKEM1.GetLastError(ErrorCode);
      AddInfo(format('! ConnectDevice ErrorNo.=%d',[ErrorCode]));
    end;
    AddInfo(' ');
  end;
end;

procedure TForm1.AddInfo(const s: string);
begin
  memo1.Lines.Add(s);
  memo1.Refresh;
end;

procedure TForm1.btnLoadDevInfoClick(Sender: TObject);
var
  ErrorCode, Value, i: integer;
begin
  for i:=1 to vleDevInfo.RowCount-1 do
  if CZKEM1.GetDeviceInfo(devid, i, value) then
  begin
    if i=29 then
    begin
      vleDevInfo.Strings.ValueFromIndex[i-1]:=BNetSpeedEncode(Value);
    end
    else if vleDevInfo.ItemProps[i-1].HasPickList then
    begin
      if (value>=0) and (value<vleDevInfo.ItemProps[i-1].PickList.Count) then
        vleDevInfo.Strings.ValueFromIndex[i-1]:=vleDevInfo.ItemProps[i-1].PickList[value]
      else
        vleDevInfo.Strings.ValueFromIndex[i-1]:=inttostr(Value);
    end
    else if (i>=19) and (i<=22) then
      vleDevInfo.Strings.ValueFromIndex[i-1]:=BTimeEncode(Value)
    else
      vleDevInfo.Strings.ValueFromIndex[i-1]:=inttostr(Value);
  end
  else
  begin
    CZKEM1.GetLastError(ErrorCode);
    AddInfo(format('! GetDeviceInfo(%d) ErrorNo.=%d',[i, ErrorCode]));
  end;
  Modified:=stringofchar(#0,100);
  
{
  Modified:=stringofchar(#0,100);
  for i:=1 to 17 do
  if CZKEM1.GetDeviceInfo(devid, i, value) then
  begin
    if vleDevInfo.ItemProps[i-1].HasPickList then
    begin
      if (value>=0) and (value<vleDevInfo.ItemProps[i-1].PickList.Count) then
        vleDevInfo.Strings.ValueFromIndex[i-1]:=vleDevInfo.ItemProps[i-1].PickList[value]
      else
        vleDevInfo.Strings.ValueFromIndex[i-1]:=inttostr(Value);
    end
    else
      vleDevInfo.Strings.ValueFromIndex[i-1]:=inttostr(Value);
  end
  else
  begin
    CZKEM1.GetLastError(ErrorCode);
    AddInfo(format('! GetDeviceInfo(%d) ErrorNo.=%d',[i, ErrorCode]));
  end;
}
end;

procedure TForm1.btnSaveDevInfoClick(Sender: TObject);
var
  ErrorCode, Value, i: integer;
begin
  for i:=1 to vleDevInfo.RowCount-1 do
  if Modified[i]='1' then
  begin
    if i=29 then
    begin
      Value := BNetSpeedDecode(vleDevInfo.Strings.ValueFromIndex[i-1]);
    end
    else if vleDevInfo.ItemProps[i-1].HasPickList then
    begin
      for value:=0 to vleDevInfo.ItemProps[i-1].PickList.Count-1 do
      if vleDevInfo.ItemProps[i-1].PickList[value]=vleDevInfo.Strings.ValueFromIndex[i-1] then
        break;
      if value>=vleDevInfo.ItemProps[i-1].PickList.Count then
        value:=0;
    end
    else if (i>=19) and (i<=22) then
      Value := BTimeDecode(vleDevInfo.Strings.ValueFromIndex[i-1])
    else
      value:=strtoint(vleDevInfo.Strings.ValueFromIndex[i-1]);
    if not CZKEM1.SetDeviceInfo(devid, i, value) then
    begin
      CZKEM1.GetLastError(ErrorCode);
      AddInfo(format('! SetDeviceInfo(%d) ErrorNo.=%d',[i, ErrorCode]));
      exit;
    end
    else
      Modified[i]:=#0;
    if i=2 then
    begin
      edtNetAddress.Text := vleDevInfo.Strings.ValueFromIndex[i-1];
      DevId:=value;
    end;
  end;
  AddInfo('SetDeviceInfo OK');

end;

procedure TForm1.btnSetTimeClick(Sender: TObject);
var
  ErrorCode,
  dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond: integer;
begin
  if CZKEM1.SetDeviceTime(devid) then
  begin
    AddInfo('SetDeviceTime OK.');
    if CZKEM1.GetDeviceTime(devid, dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond) then
      AddInfo(Format('DeviceTime=%d-%d-%d %d:%d:%d',[dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond]))
    else
    begin
      CZKEM1.GetLastError(ErrorCode);
      AddInfo(format('! GetDeviceTime ErrorNo.=%d',[ErrorCode]));
    end;
  end
  else
  begin
    CZKEM1.GetLastError(ErrorCode);
    AddInfo(format('! SetDeviceTime ErrorNo.=%d',[ErrorCode]));
  end;
end;

procedure TForm1.btnClearDataClick(Sender: TObject);
begin
  CZKEM1.ClearKeeperData(devid);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  CZKEM1.ClearGLog(devid);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  CZKEM1.ClearAdministrators(DevId);
end;

procedure TForm1.Button9Click(Sender: TObject);
var
  dwTMachine, dwEnrollNumber,dwEMachineNumber,dwVerifyMode: Integer;
  dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute: Integer;
  s: string;
  f: tfilestream;
begin
  if SaveDialog1.Execute then
  begin
    f:=tfilestream.Create(SaveDialog1.FileName, fmOpenWrite or fmCreate);
    try
    if CZKEM1.ReadGeneralLogData(DevId) then
    while CZKEM1.GetGeneralLogData(DevId,dwTMachine, dwEnrollNumber,dwEMachineNumber,dwVerifyMode,
      dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute) do
    begin
      s:=format('%5d %d %d %4d-%2d-%2d %2d:%2d'#13#10, [dwEnrollNumber,dwVerifyMode,
        dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute]);
      f.Write(s[1],length(s));
    end;
    finally
      f.Free;
    end;
  end;
end;

function NumOfHex(c: Char): integer;
begin
  result := 0;
  if c>='a' then result := ord(c)-ord('a')+10
  else if c>='A' then result := ord(c)-ord('A')+10
  else if c>='0' then result := ord(c)-ord('0');
  if result>16 then
    raise exception.Create('Error of Integer: '+c);
end;

type
  TByteArray=array[0..0] of byte;
  PByteArray=^TByteArray;

function encodedata(const BinData; size: integer): string;
var
  i: integer;
  da: pbytearray;
begin
  setlength(result, size*2);
  da:=@BinData;
  for i:= 0 to size-1 do
  begin
    result[i*2+1]:=HexOfNum[da[i] div 16];
    result[i*2+2]:=HexOfNum[da[i] mod 16];
  end;
end;

function decodedata(const s: string): string;
var
  i: integer;
  da: pbytearray;
begin
  setlength(result, length(s) div 2);
  for i:= 1 to length(result) do
  begin
    result[i]:=char(NumOfHex(s[i*2-1])*16+NumOfHex(s[i*2]));
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  CZKEM1.PowerOffDevice(DevID);
end;

procedure TForm1.BackupUser(const fn: string);
var
  f: tinifile;
  dwEnrollNumber,dwBackupNumber,Password,
  dwMachinePrivilege,i,c,Len: integer;
  EnrollData: array[0..2047] of byte;
  s: string;
  Enable: WordBool;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -