Projektbeispiel 4, CardManager PRO - V2.x
Das nachfolgende Projektbeispiel zeigt ein Standardverfahren, mit dem sich ein simpler Lesezugriff (MemoryRead) auf einer Chipkarte durchführen läßt. Jeder Speicherzugriff ist flexibel ausführbar, da sich die erforderlichen Parameter: (Zone, Offset, ByteArray, Size) individuell übergeben lassen.
 
Private Sub Template()

    '- PC/SC Dienst: SCardSvr prüfen -

    If SCARD1.Services("SCardSvr", TASK_SERVICE, False) <> 1 then
        Debug.Print "Der Dienst 'SCardSvr' wird nicht ausgeführt !"
        Exit Sub
    End If

    '- Evtl. Kollisionsdienste suchen + beenden -

    SCARD1.Services "SCM_Smart_Card_Office_Kernel", TASK_SERVICE, True
    SCARD1.Services "SCMgr.exe", TASK_APPLICATION, True
    SCARD1.
Services "sokscmpn.exe", TASK_APPLICATION, True

    '- Schnittstelle initialisieren -

    With SCARD1
        If .
GetReaderCount >0 then
            .
CardReader = .GetReaderList
            .
DisconnectFlag = SCARD_UNPOWER_CARD
            .
AutoDetect False
            .
Initialize
        Else
            Debug.Print "Es konnte kein Terminal ermittelt werden !"
        End If
    End With

End Sub

Private Sub SCARD1_OnMCARDInit()

    With SCARD1
        Debug.Print "SDK Version = " & .
Version
        Debug.Print "MCARD-Version = " & .
CardDLL
        Debug.Print "ChannelID :" & .
ChannelID
        Debug.Print "IFDSerialID :" & .
IFDSerialID
        Debug.Print "IFDVersion :" & .
IFDVersion
    End With

    '- AutoDetect aktivieren -

    SCARD1.AutoDetect True, 50

End Sub

Private Sub
SCARD1_OnMCARDError()

    Debug.Print "MCARD-API Initialisierung/Fehler: " & SCARD1.CardERR

End Sub

Private Sub SCARD1_OnInsert()

    With SCARD1
        .
ShowTrayIcon True
        .
Connect
    End With

End Sub

Private Sub SCARD1_OnConnect()

    With SCARD1.INFO
        Debug.Print "BitOrder :" & .
BitOrder
        Debug.Print "CardCompany :" & .
CardCompany
        Debug.Print "ChipCompany :" & .
ChipCompany
        Debug.Print "ChipAttrID :" & .
ChipAttrID
        Debug.Print "ChipType :" & .
ChipType
        Debug.Print "Clockrate :" & .
Clockrate
        Debug.Print "Counter :" & .
Counter
        Debug.Print "CR's :" & .
CR
        Debug.Print "MemoryZone :" & .
CardZone
        Debug.Print "MemorySize :" & .
CardSize
        Debug.Print "PIN :" & .
PIN
        Debug.Print "Protocol :" & .
Protocol
        Debug.Print "SerialNr. :" & .
SerialNr
    End With

    '- Lesezugriff, Zone:0, Offset:0, 32 Byte -

    Dim szData as String
    Dim byBytes(0 To 31) as Byte
    Dim nLoop as Integer

    If SCARD1.MemoryRead(&H0, 0, byBytes(), 32) then
        For nLoop = 0 to 31
            Debug.Print Right("0" & Hex(byBytes(nLoop)), 2);
        Next nLoop
        szData = StrConv(byBytes, vbUnicode)
        Debug.Print "= " & szData
    End If

End Sub

Private Sub SCARD1_OnConnectError()

    Debug.Print "Verbindungsfehler: " & SCARD1.CardERR

End Sub

Private Sub SCARD1_OnReadError()

    Debug.Print "Lesefehler: " & SCARD1.CardERR

End Sub

Private Sub SCARD1_OnRemoved()

    SCARD1.ShowTrayIcon False

End Sub

Private Sub SCARD1_OnMCARDClose()

    Debug.Print "Verbindung PC/SC <-> MCARD API, Kartenleser getrennt !"

End Sub

Private Sub
Form_Unload(Cancel as Integer)

    SCARD1.Shutdown

End Sub
 
©2011 by ProScan Elektronische Systeme, Buchholzer Weg 2, 42897 Remscheid, www.smartcardtools.de