Sample code for 30+ languages & platforms
DataFlex

PC/SC List Smart Card Readers (and USB Tokens)

See more SCard Examples

Demonstrates how to list the smart card readers and USB tokens connected to the computer.

Note: This functionality was introduced in Chilkat v9.5.0.87.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoScard
    Variant vStReaders
    Handle hoStReaders
    Integer iNumReaders
    Integer i
    String sTemp1

    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 sTemp1
        Showln i ": " sTemp1
        Move (i + 1) To i
    Loop

    // Sample output:
    // 0: Alcor Micro USB Smart Card Reader 0
    // 1: FS USB Token 0
    // 2: FT Java Token 0
    // 3: SCM Microsystems Inc. SCR33x USB Smart Card Reader 0
    // 4: Yubico YubiKey OTP+FIDO+CCID 0

    // 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