Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkSCard.pb"
IncludeFile "CkStringTable.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    scard.i = CkSCard::ckCreate()
    If scard.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; First establish a context to the PC/SC Resource Manager
    success = CkSCard::ckEstablishContext(scard,"user")
    If success = 0
        Debug CkSCard::ckLastErrorText(scard)
        CkSCard::ckDispose(scard)
        ProcedureReturn
    EndIf

    stReaders.i = CkStringTable::ckCreate()
    If stReaders.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkSCard::ckListReaders(scard,stReaders)
    If success = 0
        Debug CkSCard::ckLastErrorText(scard)
        CkSCard::ckDispose(scard)
        CkStringTable::ckDispose(stReaders)
        ProcedureReturn
    EndIf

    numReaders.i = CkStringTable::ckCount(stReaders)
    i.i = 0
    While i < numReaders
        Debug Str(i) + ": " + CkStringTable::ckStringAt(stReaders,i)
        i = i + 1
    Wend

    ; 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.
    success = CkSCard::ckReleaseContext(scard)
    If success = 0
        Debug CkSCard::ckLastErrorText(scard)
    EndIf



    CkSCard::ckDispose(scard)
    CkStringTable::ckDispose(stReaders)


    ProcedureReturn
EndProcedure