DataFlex
DataFlex
PC/SC Check the Status of each Smart Card Reader (and USB token)
See more SCard Examples
Demonstrates how to list the smart card readers and USB tokens connected to the computer, and check the status of each.Note: This functionality was introduced in Chilkat v9.5.0.87.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoScard
Variant vStReaders
Handle hoStReaders
Integer iNumReaders
Integer i
String sReader
String sTemp1
Boolean bTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatSCard)) To hoScard
If (Not(IsComObjectCreated(hoScard))) Begin
Send CreateComObject of hoScard
End
// First establish a context to the PC/SC Resource Manager
Get ComEstablishContext Of hoScard "user" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoScard To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatStringTable)) To hoStReaders
If (Not(IsComObjectCreated(hoStReaders))) Begin
Send CreateComObject of hoStReaders
End
Get pvComObject of hoStReaders to vStReaders
Get ComListReaders Of hoScard vStReaders To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoScard To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComCount Of hoStReaders To iNumReaders
Move 0 To i
While (i < iNumReaders)
Get ComStringAt Of hoStReaders i To sReader
Showln i ": " sReader
// Connect to this reader.
Get ComConnect Of hoScard sReader "shared" "no_preference" To bTemp1
If (bTemp1 = True) Begin
// Check the status to get the reader state, active protocol, and card ATR (if a card is inserted).
Get ComCheckStatus Of hoScard To bTemp1
If (bTemp1 = True) Begin
Get ComReaderStatus Of hoScard To sTemp1
Showln "ReaderStatus: " sTemp1
Get ComCardAtr Of hoScard To sTemp1
Showln "CardAtr: " sTemp1
Get ComActiveProtocol Of hoScard To sTemp1
Showln "ActiveProtocol: " sTemp1
End
Else Begin
Get ComLastErrorText Of hoScard To sTemp1
Showln sTemp1
Showln "CheckStatus failed."
End
// Disconnect from this reader.
Get ComDisconnect Of hoScard "leave" To iSuccess
End
Else Begin
Get ComLastErrorText Of hoScard To sTemp1
Showln sTemp1
Showln "Connect failed."
End
Showln "---------------------------------------"
Move (i + 1) To i
Loop
// Sample output:
// 0: Alcor Micro USB Smart Card Reader 0
// ReaderStatus: specific
// CardAtr: 3B7F96000080318065B0855956FB120FFE829000
// ActiveProtocol: T0
// ---------------------------------------
// 1: Generic Smart Card Reader Interface 0
// ReaderStatus: specific
// CardAtr: 3BFC180000813180459067464A00641606F2727E00E0
// ActiveProtocol: T1
// ---------------------------------------
// 2: SCM Microsystems Inc. SCR33x USB Smart Card Reader 0
// ReaderStatus: specific
// CardAtr: 3BDF96FF8131FE455A018048494443313158587300011B09
// ActiveProtocol: T1
// ---------------------------------------
// Applications should always release the context when finished.
Get ComReleaseContext Of hoScard To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoScard To sTemp1
Showln sTemp1
End
End_Procedure