📄 sample3.dpr
字号:
{$APPTYPE CONSOLE}
program sample3;
uses PCSCClasses,Windows,VASBase,SysUtils;
var
rm:TResourceManager;
i:integer;
h:THandle;
begin
try
writeln('Sample 3 - Monitoring Card Events',#10);
rm:=TResourceManager.Create(nil);
if Assigned(rm) then
with rm do
try
Connect(dsSystem);
// Monitoring many readers
writeln('Monitoring Card Events in all present readers',#10);
SelectExistingReaders;
for i:=0 to SelectedReaderCount-1 do
writeln ( ' ',SelectedReaderName[i]:15,':',Readers[SelectedReaderName[i]].Atr.Hex,#10);
if SelectedReaderCount>0 then
begin
h:=MsgThread('Press any key to stop monitoring.','PCSC Sample 3');
if h<>0 then
try
repeat
if CheckSelectedReadersState then
begin
Writeln('A change occurred in the state of ',inttostr(ChangedReaderCount),' of the selected readers!');
Writeln('The names of the readers are:');
for i:=0 to changedReaderCount-1 do
writeln(ChangedReaderName[i]);
end
else
Sleep(500);
until ShouldStop(h);
finally
CloseHandle(h);
end;
// Monitoring one reader
h:=MsgThread('Press any key to stop monitoring '+SelectedReaderName[0],'PCSC Sample 3');
if h<>0 then
try
writeln('Monitoring Card Events in one reader:',SelectedReaderName[0],#10);
if Assigned(Readers[SelectedReaderName[0]]) then
with Readers[SelectedReaderName[0]] do
repeat
if WaitForStatusChange(1000) then
begin
Writeln('A change occurred in the state of ',readername);
Writeln('Current state of the reader is:',ReaderStateToString(ReaderState));
end;
until ShouldStop(h);
finally
CloseHandle(h);
end;
end
else
Writeln('There are no readers known to Resource Manager!');
finally
rm.Free;
end;
except
on e:ESCardError do writeln(e.message);
end;
writeln('Press ENTER to close...');
readln;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -