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

📄 sample3.dpr

📁 用来测试任何pcsc兼容读卡器
💻 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 + -