📄 sample11u.pas
字号:
unit sample11u;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, FormatMemo, APDUCard, GSM1111Card, PCSCclasses;
type
TForm1 = class(TForm)
ResourceManager1: TResourceManager;
card: TGSM1111APDU;
memo: TFormatMemo;
procedure ResourceManager1SelectedStateChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
public
procedure TryGSM(reader:TSmartcardReader);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.TryGSM(reader:TSmartcardReader);
begin
reader.WaitForStatusChange(0);
card.readername:=reader.readername;
card.Reset;
if card.Connected then
if card.Select(id_MF)=errOK then
if card.Select(id_EF_ICCID)=errOK then
if card.ReadBinary(0,10)=errOK then
begin
memo.AddLine('Ok. Seems to be a /bGSM/b Card.');
memo.AddLine('Id number:/c008'+BufToBCD(card.answer.data^,card.answer.datalen,0)+'/c000');
exit;
end;
memo.AddLine('/c00FNot a GSM Card!/c000');
end;
procedure TForm1.ResourceManager1SelectedStateChange(Sender: TObject);
var
i:integer;
begin
with ResourceManager1 do
for i:=0 to ChangedReaderCount-1 do
if ChangedReaderInfo[i].NewReaderState * [rsCardPresent,rsEmpty]<>[] then
begin
memo.AddLine('/b/c800'+ChangedReaderName[i]+'/b/c000 : '+ChangedReaderInfo[i].Atr.Hex);
if rsCardPresent in ChangedReaderInfo[i].ReaderState then
TryGSM(Readers[ChangedReaderName[i]]);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
ResourceManager1.SelectExistingReaders;
ResourceManager1.WatchSelectedReaders;
memo.AddLine('Readers found:');
with ResourceManager1 do
for i:=0 to SelectedReaderCount-1 do
memo.AddLine('/b/c800'+SelectedReaderName[i]+'/b/c000');
memo.AddLine('Watching...');
ResourceManager1.InvalidateSelectedReadersState;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -