📄 main.pas
字号:
CreateObject(handle,GB_GB,false); //动态库函数调用前必须先创建此对象
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
DestroyObject; //动态库退出时必须先销毁此对象
end;
procedure TMainForm.BtSetWKClick(Sender: TObject);
var
OldKey, NewKey :BLOCKSTRUCT; //块结构
kk :integer;
begin
memo1.Lines.Clear;
//默认密码A和密码B为16个FF,要修改成其他密码时请多多小心注意,卡密码丢失后无法找回
for kk:=1 to 16 do
begin
Oldkey.Data[kk]:=$FF; //16进制FF
NewKey.Data[kk]:=$FF;
end;
//修改卡密码的命令
SetCardRootKey(OldKey.Data, NewKey.Data);
end;
procedure TMainForm.BtReadSectorClick(Sender: TObject);
var
Sector :HEADER_SECTOROPRSTRUCT;
kk:integer;
begin
memo1.Lines.Clear;
//默认读取的扇区为0扇区,扇区密码全部为FF,分为密码A和密码B:长度为6个BYTE
Sector.BlockFlag[1]:=true;
Sector.BlockFlag[2]:=true;
Sector.BlockFlag[3]:=true;
Sector.BlockFlag[4]:=true;
Sector.SectorNum :=0; //扇区号
Sector.AuthMode :=1; //认证方式
for kk:=1 to 6 do
begin
Sector.AuthKeyA[KK]:=$FF;
Sector.AuthKeyB[kk]:=$FF;
end;
SendCommand(integer(MT_READ_SECTOR), @Sector, sizeof(HEADER_SECTOROPRSTRUCT));
end;
procedure TMainForm.BtInicardClick(Sender: TObject);
begin
memo1.Lines.Clear;
m_cardID.CardType :=1;
if m_cardid.CardID =0 then
showmessage('请先寻卡')
else
SendCommand(integer(MT_INIT_CARDOFHD6K), @m_CardID, sizeof(m_CardID));// 初始化卡
//初始化卡完成的工作是:将卡的0-5扇区绑定,0 扇区密码不变但将1-5扇区的密码修改
end;
procedure TMainForm.BtReadCardClick(Sender: TObject);
begin
memo1.Lines.Clear;
if m_cardID.CardID <>0 then
begin
//读卡时注意卡m_CardID.CardType 存放的是钱包索引
m_CardID.CardType :=$01;
if SendCommand(integer(MT_READDATA_CARDOFHD6K), @m_CardID, sizeof(m_CardID))=false then
showmessage('命令发送失败');
end
else begin
Showmessage('请先寻卡');
Exit;
end;
end;
procedure TMainForm.BtWriteCardClick(Sender: TObject);
var
CardInfo : CARDINFO_HD6K;
Str : string;
kk : integer;
begin
memo1.Lines.Clear;
if m_cardID.CardID <>0 then
begin
CardInfo.CardID := M_CardID; //写卡时要带上寻卡时读出的资料,否则命令失败
CardInfo.CardNo := 12345; // 卡号
str:= 'gxj760998';
for kk:=1 to length(str) do // 持卡人编号
CardInfo.PersonNo[kk]:=str[kk];
str :='张三';
for kk:=1 to length(str) do // 持卡人姓名
CardInfo.Myname[kk]:=str[kk];
CardInfo.GradeNo :=0; // 级别
CardInfo.GroupNo := 0; // 分组
str:= '000000';
if length(str)=6 then
for kk:=1 to length(str) do
CardInfo.Password[kk] :=str[kk]
else begin
ShowMessage('密码要6位数字');
exit;
end;
CardInfo.DeptNo:=250;//部门编号
CardInfo.CardType := 0; // 卡类型
CardInfo.CardType :=CardInfo.CardType+ Integer(CARDTYPE_POS); //收费
CardInfo.CardType :=CardInfo.CardType+ integer(CARDTYPE_ATT); //考勤
CardInfo.CardType := CardInfo.CardType+Integer(CARDTYPE_ACC); //门禁
CardInfo.CardType :=CardInfo.CardType+ integer(CARDTYPE_OPR); //操作员
CardInfo.OprCardType := integer(OPRCARDTYPE_ENDOPR); //操作员类行
//CardInfo.OprCardType := Integer(OPRCARDTYPE_ENDCONFIG);
CardInfo.StartDate.Year := 2006-2000; // 启用日期
CardInfo.StartDate.Month := 5;
CardInfo.StartDate.Day := 10;
CardInfo.DeadDate.Year := 2010 - 2000; // 截止日期
CardInfo.DeadDate.Month := 10;
CardInfo.DeadDate.Day :=10;
CardInfo.QuotaPerDay := 100; // 日限额-元
CardInfo.QuotaPerTimes := 50; // 次限额-元
CardInfo.CardDeposit := 30; // 卡押金-元
CardInfo.CertType := Integer(CERTTYPE_ID); //证件类型
str:='1234567890';
for kk:=1 to length(str) do
Cardinfo.CertNo[kk]:=str[kk];
CardInfo.LockFlag := true; //1锁,0不锁 // 锁卡标志
CardInfo.IsWriteEW := true; //1 写,0不写 // 是否写钱包
CardInfo.EWallet.CardID :=m_CardID;
CardInfo.EWallet.IndexOfEW:=1; // 钱包索引号
CardInfo.EWallet.Deposit :=50; // 本次充值额
CardInfo.EWallet.Balance :=50; // 钱包余额
CardInfo.EWallet.SumOfDeposit:=0; // 累计充值额
CardInfo.EWallet.TraceOfEW :=0; // 钱包流水号
CardInfo.EWallet.IntradaySumOfAmount:=0; // 当日累计消费额
CardInfo.EWallet.LastDate_D.Year :=06; // 充值日期时间
CardInfo.EWallet.LastDate_D.Month :=05;
CardInfo.EWallet.LastDate_D.Day :=10;
if prop.ReaderID <>0 then
begin
CardInfo.EWallet.ReaderSN := Prop.ReaderID ; // Reader序列号
end
else begin
ShowMessage('请先读读卡器');
exit;
end ;
SendCommand(Integer(MT_WRITEDATA_CARDOFHD6K), @CardInfo, sizeof(CardInfo)); // 写卡
end
else ShowMessage('请先寻卡');
end;
procedure TMainForm.BtEraseCardClick(Sender: TObject);
begin
memo1.Lines.Clear;
//洗卡与初始化卡是相对立的,它的任务是将卡扇区0-5的绑定解除,并还原其密码为FF.
if m_cardID.CardID <>0 then
begin
SendCommand(integer(MT_ERASE_CARDOFHD6K), @m_CardID, sizeof(m_CardID));// 洗卡(清卡密码及数据)
end
else ShowMessage('请先寻卡');
end;
procedure TMainForm.BtClearClick(Sender: TObject);
begin
memo1.Lines.Clear;
//此命令在将扇区的数据快清零
if m_cardID.CardID <>0 then
begin
SendCommand(integer(MT_ERASEDATA_CARDOFHD6K), @m_CardID, sizeof(m_CardID));// 清卡数据
end
else ShowMessage('请先寻卡');
end;
procedure TMainForm.BtReaderClick(Sender: TObject);
begin
memo1.Lines.Clear;
SendCommand(Integer(MT_RECV_READERPROP),nil,0);// 取读卡器属性
end;
procedure TMainForm.BtReadEWClick(Sender: TObject);
begin
memo1.Lines.Clear;
if m_cardID.CardID <>0 then
begin
m_CardID.CardType :=1;//钱包索引,如果是
SendCommand(integer(MT_READEW_CARDOFHD6K), @m_CardID, sizeof(m_CardID));// 读钱包命令
end
else ShowMessage('请先寻卡');
end;
procedure TMainForm.BtWriteEWClick(Sender: TObject);
var
m_EWInfo :EW_HD6K;
begin
memo1.Lines.Clear;
if m_cardID.CardID <>0 then
begin
m_EWInfo.CardID :=m_CardID; //写卡时 要带上此卡的序列号
m_EWInfo.IndexOfEW :=1; // 钱包索引号
m_EWInfo.Deposit:=100; // 本次充值额
m_EWInfo.Balance:=100; // 钱包余额
m_EWInfo.SumOfDeposit:=100; // 累计充值额
m_EWInfo.TraceOfEW:=0; // 钱包流水号
m_EWInfo.IntradaySumOfAmount:=0; // 当日累计消费额
m_EWInfo.ReaderSN:=prop.ReaderID ; // Reader序列号
m_EWInfo.LastDate_D.Year :=06; // 充值日期时间
m_EWInfo.LastDate_D.Month :=05;
m_EWInfo.LastDate_D.Day :=10;
SendCommand(integer(MT_WRITEEW_CARDOFHD6K), @m_EWInfo, sizeof(m_EWInfo));// 写钱包
end
else ShowMessage('请先寻卡');
end;
procedure TMainForm.BTSetWaitTimeClick(Sender: TObject);
var
nWaitTime :integer;
begin
nWaitTime :=4000;
SendCommand(Integer(MT_SET_WAITTIME), @nWaitTime, sizeof(integer));// 设置操作等待时间
end;
procedure TMainForm.ReadCard4kClick(Sender: TObject);
var
bSecNo : byte;
begin
//'BYTE bSecNo = csedtSecNumOfHD4k->Value;
//'if (MySetCardRootKey())
//'if (TimerOn(2000, btnReadCardOfHD4k))
//'SendCommand(MT_READ_CARDOFHD4K, &bSecNo, sizeof(bSecNo));// 读HD4k卡
bSecNo := 3;//要读的扇区号
SendCommand(integer(MT_READ_CARDOFHD4K), @bSecNo, sizeof(bSecNo))
end;
procedure TMainForm.writecard4KClick(Sender: TObject);
VAR
ATTCardinfo : ATTGUARDCARD_HD4K;
POSCardInfo : POSCARD_HD4K;
OPRCardInfo : OPRCARD_HD4K;
Str : string;
kk : integer;
begin
// 考勤门禁卡
//ATTCardinfo.SectorNo := 2;// 扇区号
//ATTCardinfo.FileSort := integer(FILEOFHD4K_ATT);
//ATTCardinfo.CardNo := 1245;
//str :='gxj76';
//for kk:=1 to length(str) do // 人员编号
// attcARDinfo.PersonNo[kk]:=str[kk];
//ATTCardinfo.Grade := 1;
//ATTCardinfo.Group := 2;
//for kk:=1 to 4 do // 卡密码
// attcARDinfo.Password[kk]:='0';
//str :='张三';
// for kk:=1 to length(str) do // 持卡人姓名
// ATTCardinfo.myName[kk]:=str[kk];
//ATTCardinfo.Date.Year := 2006-2000;
//ATTCardinfo.Date.Month := 05;
//ATTCardinfo.Date.Day := 16;
//SendCommand(integer(MT_WRITE_CARDOFHD4K), @ATTCardinfo, sizeof(ATTGUARDCARD_HD4K));// 写HD4k考勤卡
// 消费卡文件
POSCardInfo.SectorNo := 3;// 扇区号
POSCardInfo.FileSort := integer(FILEOFHD4K_POS);
POSCardInfo.CardNo := 123456;
str := '你好';
//posCardInfo.myName :=str;
for kk:=1 to length(str) do
POSCardInfo.myName[kk] :=str[kk];
//for kk:=1 to 4 do
//'POSCardInfo.Password[kk] :='0';
//POSCardInfo.myName := 'nihao';
POSCardInfo.Group := 20;
POSCardInfo.Date.Year := 6;
POSCardInfo.Date.Month :=5;
POSCardInfo.Date.Day := 16;
POSCardInfo.Balance := 50;
SendCommand(integer(MT_WRITE_CARDOFHD4K), @POSCardInfo, sizeof(POSCARD_HD4K));// 写消费卡
// 操作员卡
//OPRCardInfo.SectorNo = 2;// 扇区号
//OPRCardInfo.FileSort = integer(FILEOFHD4K_OPR);
//OPRCardInfo.CardNo = 15421;
//str := '你好';
//memset(OPRCardInfo.myName, 0x00, sizeof(CardInfo.Name));
//memcpy(OPRCardInfo.myName, edtNameOfHD4k->Text.c_str(), edtNameOfHD4k->Text.Length());
//memcpy(OPRCardInfo.Password, edtPasswordOfHD4k->Text.c_str(), edtPasswordOfHD4k->Text.Length());
//OPRCardInfo.Date.Year = csedtYearOfHD4k->Value - 2000;
//OPRCardInfo.Date.Month = csedtMonthOfHD4k->Value;
//OPRCardInfo.Date.Day = csedtDayOfHD4k->Value;
//OPRCardInfo.POSID = csedtPOSIDOfHD4k->Value;
//OPRCardInfo.OprID = csedtOprIDOfHD4k->Value;
//if (TimerOn(2000, btnWriteCardOfHD4k))
//SendCommand(MT_WRITE_CARDOFHD4K, &OPRCardInfo, sizeof(OPRCARD_HD4K));// 写操作员卡
end;
procedure TMainForm.ReadEW4KClick(Sender: TObject);
var
bSecNo : byte;
begin
bSecNo := 3;
SendCommand(integer(MT_READEW_CARDOFHD4K), @bSecNo, sizeof(bSecNo));// 读HD4k钱包
end;
procedure TMainForm.WriteEW4kClick(Sender: TObject);
var
EWInfo : EW_HD4k;
begin
EWInfo.SectorNo := 3;// 扇区号
EWInfo.FileSort := integer(FILEOFHD4K_POS);
EWInfo.CardNo := 12345;
EWInfo.Balance := 100;
EWInfo.TraceOfEW := 0;
EWInfo.Date.Year := 2006 - 2000;
EWInfo.Date.Month := 05;
EWInfo.Date.Day := 12;
SendCommand(integer(MT_WRITEEW_CARDOFHD4K), @EWInfo, sizeof(EW_HD4K));// 写HD4k钱包
end;
procedure TMainForm.BtRWLogClick(Sender: TObject);
begin
SetCommLog(true,true);
ShowMessage('设定读写日志成功');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -