📄 comsdktest.pas
字号:
UName, UPwd: widestring;
begin
DeleteFile(fn);
f := tinifile.Create(fn);
try
if CZKEM1.ReadAllUserID(DevID) then
begin
c:=0;
while CZKEM1.GetAllUserInfo(DevID, dwEnrollNumber, UName, UPwd,
dwMachinePrivilege, Enable) do
begin
s:=format('Users_%d',[dwEnrollNumber]);
f.WriteInteger(s,'Privilege',dwMachinePrivilege);
f.WriteBool(s,'Enabled', Enable);
f.WriteString(s, 'Name', UName);
f.WriteString(s, 'Password', UPwd);
//Try get every fingerprint template
for i:=0 to 9 do
begin
zeromemory(@EnrollData[0], 2048);
Len:=2048;
if CZKEM1.GetUserTmp(DevId, dwEnrollNumber, i, EnrollData[0], Len) then
f.WriteString(s, 'FPT_'+inttostr(i), encodedata(EnrollData[0], Len));
end;
inc(c);
end;
end;
finally
f.Free;
end;
end;
procedure TForm1.ReadDeviceStatus;
var
s: widestring;
ErrorCode, Value, i,
dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond: integer;
begin
if CZKEM1.GetFirmwareVersion(devid, s) then
AddInfo('Firmware Version: '+s)
else
begin
CZKEM1.GetLastError(ErrorCode);
AddInfo(format('! GetFirmwareVersion ErrorNo.=%d',[ErrorCode]));
end;
if CZKEM1.GetSerialNumber(devid, s) then
AddInfo('Serial Number: '+s)
else
begin
CZKEM1.GetLastError(ErrorCode);
AddInfo(format('! GetSerialNumber ErrorNo.=%d',[ErrorCode]));
end;
if CZKEM1.GetProductCode(devid, s) then
AddInfo('ProductCode: '+s)
else
begin
CZKEM1.GetLastError(ErrorCode);
AddInfo(format('! GetProductCode ErrorNo.=%d',[ErrorCode]));
end;
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;
for i:=1 to length(StatusNames) do
if CZKEM1.GetDeviceStatus(devid, i, value) then
AddInfo(format('%s: %d', [StatusNames[i],value]))
else
begin
CZKEM1.GetLastError(ErrorCode);
AddInfo(format('! GetDeviceStatus(%d) ErrorNo.=%d',[i, ErrorCode]));
end;
end;
procedure TForm1.RestoreUser(const fn: string);
var
f: tinifile;
eno,i: integer;
dwEnrollNumber,dwBackupNumber,Password,
dwMachinePrivilege, dwEnable, c: integer;
fpt, s, UName, UPwd: string;
Sections: Tstrings;
begin
f:=tinifile.Create(fn);
try
Sections := tstringlist.Create;
try
f.ReadSections(Sections);
for i:=1 to 65534 do
begin
s:=format('Users_%d',[i]);
if Sections.IndexOf(s)>=0 then
begin
Application.ProcessMessages;
dwMachinePrivilege := f.ReadInteger(s, 'Privilege', 0);
dwEnable := f.ReadInteger(s, 'Enabled', 1);
UPwd := f.ReadString(s, 'Password', '');
if UPwd='-1' then
UPwd:='';
UName := f.ReadString(s, 'Name','');
CZKEM1.SetUserInfo(DevId, i, UName, UPwd, dwMachinePrivilege, dwEnable<>0);
for dwBackupNumber:=0 to 9 do
begin
fpt:=f.ReadString(s, 'FPT_'+inttostr(dwBackupNumber), '');
if fpt>'' then
begin
fpt:=decodedata(fpt);
if CZKEM1.SetUserTmp(DevId, i, dwBackupNumber, pbyte(@fpt[1])^) then
AddInfo(format('SetEnrollData OK: User=%d,FP=%d', [i,dwBackupNumber]))
else
begin
CZKEM1.GetLastError(eno);
AddInfo(format('SetEnrollData Fail: User=%d,FP=%d, Error=%d', [i,dwBackupNumber,eno]));
end;
end;
end;
end;
end;
finally
sections.Free;
end;
finally
f.free;
end;
end;
procedure TForm1.vleDevInfoValidate(Sender: TObject; ACol, ARow: Integer;
const KeyName, KeyValue: String);
begin
Modified[ARow] := '1';
end;
procedure TForm1.btnSetNameClick(Sender: TObject);
begin
ShowUserForm(CZKEM1, DevID);
end;
procedure TForm1.btnDeleteUserClick(Sender: TObject);
begin
CZKEM1.DeleteEnrollData(DevId, 69, DevId, 0);
CZKEM1.DeleteEnrollData(DevId, 69, DevId, 1);
end;
var
Testing: Boolean=false;
procedure TForm1.btnAutoTestClick(Sender: TObject);
var
i: integer;
begin
Testing:=not Testing;
if Testing then
btnAutoTest.Caption := 'End Test'
else
btnAutoTest.Caption := 'Start Test';
i:=0;
while Testing do
begin
AddInfo(Format('-----------Testing %d--------',[i]));
inc(i);
btnConnect.Click;
if btnConnect.Tag=0 then
begin
Testing:=not Testing;
if Testing then
btnAutoTest.Caption := 'End Test'
else
btnAutoTest.Caption := 'Start Test';
break;
end;
// sleep(1000);
Addinfo('Clear Data...');
btnClearData.Click;
if FileExists(OpenDialog1.FileName) then
RestoreUser(OpenDialog1.FileName);
Application.ProcessMessages;
Addinfo('Delete User 69...');
btnDeleteUser.Click;
Sleep(2000);
ReadDeviceStatus;
Application.ProcessMessages;
if FileExists(OpenDialog1.FileName) then
RestoreUser(OpenDialog1.FileName);
ReadDeviceStatus;
Addinfo('Clear Data...');
btnClearData.Click;
Addinfo('Disconnect...');
btnConnect.Click;
Application.ProcessMessages;
end;
end;
procedure TForm1.btnBackupUserClick(Sender: TObject);
begin
if savedialog1.Execute then
BackupUser(savedialog1.FileName);
end;
procedure TForm1.btnRestoreClick(Sender: TObject);
begin
if OpenDialog1.Execute then
RestoreUser(OpenDialog1.FileName);
end;
procedure TForm1.sbtnRS232Click(Sender: TObject);
begin
edtnetAddress.EditLabel.Caption := 'Com Port:';
edtNetPort.EditLabel.Caption := 'Device ID:';
edtnetAddress.Text := 'COM1';
edtNetPort.Text := '1';
end;
procedure TForm1.sbtnTCPIPClick(Sender: TObject);
begin
edtnetAddress.EditLabel.Caption := 'IP Address:';
edtNetPort.EditLabel.Caption := 'Port Number:';
edtnetAddress.Text := '192.168.1.201';
edtNetPort.Text := '$1112';
end;
procedure TForm1.btnACUnlockClick(Sender: TObject);
begin
CZKem1.ACUnlock(DevId,200)
end;
procedure TForm1.chkEnabledClick(Sender: TObject);
begin
CZKEM1.EnableDevice(DevID, chkEnabled.Checked);
end;
const
TEMP1='A1CA268296295AA10B50AA604009469950016A41194E3C514A3754D318D6B94D4019DDBE7A' +
'0312DCC078000EE52277F10735AF7A780D44A24FA30B4FB92BB80A819468610C221250401A' +
'071C7A93092B8A6C400E18147DF109249C53B81740A747F30CC8945FBC12258D42540FDFA4' +
'39FC10B9867CD20714993DB409C71C26330B453341BC10778873F40788B461B410C6BF4FA3' +
'09E9B418382C9B266B930740BD5D78136AA73F323DC1283D405FB52D12220739A587380A31' +
'AB2ED116263F293C0B7A46140614C334EA0F10117E4C56A5A8BACEFFFBEC12C0434C55A299' +
'AACE6E76A2FCECA846A2FF99995D656F7707A1DFC9184BA2AE799958616D010A12A1EA994B' +
'A19E6881545C6C0313A1FBA81F48A3BB7688BF5D1521248343A3CC8667AC49392FA1776728' +
'42A7BC8467BB5215656742A79C6558CC7535556641A28A5646404BA3842663663FA2796521' +
'3A51A3734545363DA16A312418086E57A2433343383E3A38231A120C026F5CA23454413D39' +
'3314A227543061A244655246382104A2BA652164A2586454517E2A05A498656448A2615F57' +
'54C207A4565A978AA2704B43C476A29AA8BD0FE0317773';
TEMP2='ocoqgo5BMsMGAcUxvArqwlMxCOlEWfwM6qEuYQs4OTSAEHuUQ4EZOKhGQAyTETuTDUYqLABqNQM9wxNhDxUABMcRS/FQJChldAyKtSsjEQIjQ/gOnyYoIRhOKj7AEpQRSJNlMokb'+
'AAVSrlTxDYAfNwAJLxErMwxKmQ88BcUbINQLSZMVfAZPk1zSBZoiafQMmK9tMwV+C2l8BJmEUzQOhjdctAl4sRdjC9I7SzgIdQt0swomn3Z4B5undLIQijUaQA/gFH9iA521brgI'+
'dwhXkROGwmF8Cu4pVEQSX4BKCxARfk5Woau7aXQHFKH8qSPAR6L+qrpkcQYWof2agUeiz6mJXGkFGCGhuZgmR6LOiIdUXQscofyYgUqjq4ZmkiWiTKl5KEqjuWRWUS2hKZiCSqap'+
'YkYyE3h5gUmnqlMzMiRniXhLoZpSPjWkAVVXiHdNoapjPi0hozd1d3YRTqG8eEkapEaGVnh4S6Hvnm4HpOeGZniJRU5cYGdzA6PIhneHgT9LYmhudqLahmWCd3d+Q2qmzMyXV2eY'+
'lMJzpaqmh3d6hl/DA6Rmd4iXmGPAxAWiVIiageD/';
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
i:= CZKEM1.GetFPTempLengthStr(TEMP2);
Memo1.lines.add(format('FPTempLength=%d',[i]));
if CZKEM1.SetEnrollDataStr(devid, 1, devid, 0, 1, TEMP2, 0) then
Memo1.lines.add('SetEnrollDataStr OK')
else
Memo1.lines.add('SetEnrollDataStr Fail.');
end;
function TForm1.BTimeDecode(const TimeStr: string): integer;
var
p,m,s: integer;
begin
p := pos(':', TimeStr);
m:=strtointdef(copy(TimeStr,1,p-1),-1);
s:=strtointdef(copy(TimeStr,p+1,100),-1);
if (m<0) or (s<0) or (m>255) or (s>255) then result := 255;
result := m *256+s;
end;
function TForm1.BTimeEncode(MinuteSecond: integer): string;
var
m,s: integer;
begin
m:=MinuteSecond div 256;
s:=MinuteSecond mod 256;
if (MinuteSecond<0) or (m>59) or (s>59) then
result := 'No'
else
result := format('%d:%d', [m,s]);
end;
function TForm1.BNetSpeedDecode(const speed: string): integer;
var
i: integer;
begin
result := NetSpeedValues[0];
for i := 0 to length(NetSpeeds)-1 do
if speed=NetSpeeds[i] then
begin
result := NetSpeedValues[i];
exit;
end;
end;
function TForm1.BNetSpeedEncode(speed: integer): string;
var
i: integer;
begin
result := NetSpeeds[0];
for i := 0 to length(NetSpeeds)-1 do
if speed=NetSpeedValues[i] then
begin
result := NetSpeeds[i];
exit;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if SaveDialog1.Execute then
SaveGLogs(SaveDialog1.filename);
end;
function TForm1.SaveGLogs(const fn: string): integer;
var
dwEnrollNumber, dwSEnrollNumber, Params3,
Params0, Params1, dwManipulation, Params2, dwYear,
dwMonth, dwDay, dwHour, dwMinute: Integer;
s: string;
f: tfilestream;
begin
result := 0;
f:=tfilestream.Create(fn, fmOpenWrite or fmCreate);
try
if CZKEM1.ReadSuperLogData(DevId) then
while CZKEM1.GetSuperLogData(DevId, dwEnrollNumber, dwSEnrollNumber, Params3,
Params0, Params1, dwManipulation, Params2, dwYear,
dwMonth, dwDay, dwHour, dwMinute) do
begin
s:=format('%5d %5d %5d %5d %5d %5d %d-%d-%d %d:%d'#13#10,[dwSEnrollNumber, dwManipulation,
Params0, Params1, Params2, Params3,
dwYear, dwMonth, dwDay, dwHour, dwMinute]);
f.Write(s[1],length(s));
inc(result);
end;
finally
f.Free;
end;
end;
procedure TForm1.btnSMSClick(Sender: TObject);
begin
if btnSMS.Tag=0 then
begin
CZKEM1.SetSMS(0, 4, 'Welcome to ZK');
CZKEM1.SetSMS(1, 2, 'Meet at 10:00');
CZKEM1.SetSMS(2, 3, 'Write a report for C12 item');
btnSMS.Caption := 'Clear SMS';
btnSMS.Tag:=1;
end
else
begin
CZKEM1.SetSMS(0, 0, '');
CZKEM1.SetSMS(1, 0, '');
CZKEM1.SetSMS(2, 0, '');
btnSMS.Caption := 'Set SMS';
btnSMS.Tag:=0;
end;
end;
procedure TForm1.Button7Click(Sender: TObject);
var
w,h: integer;
image: array of byte;
begin
setlength(image, 1024*512);
w := 80;
if CZKEM1.CaptureImage(TRUE, w, h, Image[0], 'fp.bmp') then
begin
addinfo('Captured an image.');
end
else
addinfo('Capture image fail.');
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
if CZKEM1.UpdateFirmware('emfw.cfg') then
begin
addinfo('UpdateFirmware success.pls restart the devie.');
end
else
addinfo('UpdateFirmware fail.');
end;
procedure TForm1.Button12Click(Sender: TObject);
begin
CZKEM1.clearLCd;
end;
procedure TForm1.Button11Click(Sender: TObject);
begin
czkem1.EnableClock(0);
czkem1.WriteLCD(0,0,' *** ');
czkem1.WriteLCD(1,0,'Welcome to ZK');
czkem1.WriteLCD(2,0,' *** ');
czkem1.WriteLCD(3,0,' ');
MessageDlg('Close this window to restore lcd display', mtInformation, [mbOK], 0);
czkem1.EnableClock(1);
end;
procedure TForm1.Button14Click(Sender: TObject);
begin
czkem1.Beep(1000);
end;
procedure TForm1.Button13Click(Sender: TObject);
var
i: integer;
begin
for i:=0 to 9 do
begin
czkem1.PlayVoiceByIndex(i);
if MessageDlg('Continue next voice?', mtConfirmation, [mbYes,mbNo], 0) <> mrYes then
exit;
end;
czkem1.PlayVoice(30,29);
end;
procedure TForm1.Button15Click(Sender: TObject);
var
ErrorCode: integer;
begin
CZkEM1.CancelOperation;
CZkEM1.DelUserTmp(1, 65530, 0);
if CZkEM1.StartEnroll(65530, 0) then
AddInfo('Start Enroll a user, UserID=65530, FingerID=0')
else
begin
CZkEM1.GetLastError(ErrorCode);
AddInfo('StartEnroll Error, Code='+inttostr(ErrorCode));
end;
end;
procedure TForm1.Button16Click(Sender: TObject);
var
ErrorCode: integer;
begin
CZkEM1.CancelOperation;
if CZkEM1.StartVerify(65530, 0) then
AddInfo('Start Verify a user, UserID=65530, FingerID=0')
else
begin
CZkEM1.GetLastError(ErrorCode);
AddInfo('StartVerify Error, Code='+inttostr(ErrorCode));
end;
end;
procedure TForm1.Button17Click(Sender: TObject);
var
ErrorCode: integer;
begin
CZkEM1.CancelOperation;
if CZkEM1.StartIdentify then
AddInfo('StartIdentify user.')
else
begin
CZkEM1.GetLastError(ErrorCode);
AddInfo('StartIdentify Error, Code='+inttostr(ErrorCode));
end;
end;
procedure TForm1.Button18Click(Sender: TObject);
var
ErrorCode: integer;
begin
if CZkEM1.CancelOperation then
AddInfo('CancelOperation OK.')
else
begin
CZkEM1.GetLastError(ErrorCode);
AddInfo('CancelOperation Error, Code='+inttostr(ErrorCode));
end;
end;
procedure TForm1.CZKEM1FingerFeature(ASender: TObject; Score: Integer);
begin
AddInfo(format('Finger Feature: %d',[Score]));
end;
procedure TForm1.CZKEM1Verify(ASender: TObject; UserID: Integer);
begin
AddInfo(format('User Verified: %d',[UserID]));
end;
procedure TForm1.Button19Click(Sender: TObject);
var
ErrorCode: integer;
begin
if SaveDialog2.Execute then
begin
if CZKEM1.BackupData(SaveDialog2.FileName) then
begin
AddInfo('Backup Data to File: "'+SaveDialog2.FileName+'" OK.');
if OpenDialog2.FileName='' then
OpenDialog2.FileName := SaveDialog2.FileName;
end
else
begin
CZkEM1.GetLastError(ErrorCode);
AddInfo('CancelOperation Error, Code='+inttostr(ErrorCode));
end;
end;
end;
procedure TForm1.Button20Click(Sender: TObject);
var
ErrorCode: integer;
begin
if OpenDialog2.Execute then
begin
if CZKEM1.RestoreData(OpenDialog2.FileName) then
AddInfo('Restore Data from File: "'+OpenDialog2.FileName+'" OK.')
else
begin
CZkEM1.GetLastError(ErrorCode);
AddInfo('RestoreData Error, Code='+inttostr(ErrorCode));
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -