Lettura tessere sanitarie con VBA e Winscard

di Anonimizzato20981 il
6 risposte
Ciao a tutti,
ho inserito in un mio programma la possibilità di leggere i dati anagrafici dei pazienti da tessere sanitarie e carte di identità elettroniche.
Il programma funziona, ma se per caso, una tessera viene inserita male, o non è leggibile, la lettura corrente non va a buon fine, ma nemmeno tutte le successive. Pensare, con la fila di persone davanti di dover riavviare il pc o mettersi a togliere e ricollegare il lettore dal pc, per loro non è pensabile.
Le istruzioni di apertura delle comunicazione sono queste:
Dim hContext As Long
Dim hCard As Long
Dim retval As Long
Dim Scope As Long
Dim readers As String * 256
Dim groups As String * 256
Dim activeprotocol As Long
Dim readerlen As Long
Dim scard_protocol_t0_or_t1 As Long
Dim SCARD_SHARE_SHARED As Long
Dim recvlen As Long
Dim bytArray(256) As Byte
Dim recvbuff(256) As Byte
Dim Smem As Integer
Dim i As Integer
Dim chaine_hexa As String
Dim scad_leave_card As Long
Dim strHexa As String
Dim risposta As String
Dim k As Integer
Dim LenEmettitore As Long
Dim Emettitore As String
Dim LenRilascio As Integer
Dim Rilascio As String
Dim LenScadenza As Integer
Dim Scadenza As String
Dim LenCognome As Integer
Dim COGNOME As String
Dim LenNome As Integer
Dim NOME As String
Dim LenValore1 As Integer
Dim LenValore2 As Integer
Dim LenValore3 As Integer
Dim LenCodice As Integer
Dim CODICE As String


scard_protocol_t0_or_t1 = 0
SCARD_SHARE_SHARED = 3
readerlen = 256
recvlen = 255
strHexa = ""

retval = SCardEstablishContext(Scope, 0, 0, hContext)
If retval <> 0 Then
MsgBox "erreur SCardEstablishContext n." & CStr(retval)
GoTo ChiudiConnessione
Exit Function
End If

retval = SCardListReaders(hContext, groups, readers, readerlen)
If retval <> 0 Then
MsgBox "erreur SCardListReaders n. " & CStr(retval)
GoTo ChiudiConnessione
Exit Function
End If

retval = SCardConnect(hContext, readers, SCARD_SHARE_SHARED, scard_protocol_t0_or_t1, hCard, activeprotocol)
If retval <> 0 Then
retval = SCardReconnect(hCard, SCARD_SHARE_SHARED, scard_protocol_t0_or_t1, 0, activeprotocol)
MsgBox "erreur SCardConnect n. " & CStr(retval)
GoTo ChiudiConnessione
Exit Function
End If

retval = SCardStatus(hCard, readers, readerlen, 1, scard_protocol_t0_or_t1, recvbuff(0), recvlen)
If retval <> 0 Then
MsgBox "Erreur SCardStatus n. " & CStr(retval)
GoTo ChiudiConnessione
Exit Function
End If

In genere l'errore ce l'ho sulla funzione sCardConnect. In caso di errori si salta a ChiudiConnessione:

' ############################################################################
' CHIUDO LA CONNESSIONE CON LA CARTA

retval = SCardDisconnect(hCard, 0)
If (retval <> 0) Then MsgBox ("Errore: " & CStr(retval))

retval = SCardReleaseContext(hContext)
If (retval <> 0) Then MsgBox ("Errore: " & CStr(retval))

ReadTesseraSanitaria = risposta

End Function


Quindi, in teoria tutto a posto, ma dopo un eventuale errore di connessione, quando inserisco una tessera, non lampeggia la luce che rileva la tessera, ma rimane fissa come se non leggesse nulla.
Qualcuno è in grado di aiutarmi?

Grazie

6 Risposte

  • Ciao emmezeta, sarei interessato al modulo per poter leggere la tessera sanitaria con VBA, possiamo parlarne? Grazie!
  • Può essere ipotizzabile che il lettore vada in 'tilt' e perciò gli si dovrebbe inviare un comando di reset.
    Ma chiaramente, senza poter testare il tutto in pratica, è impossibile fare una diagnosi certa.
  • Sarei interessato anch'io al modulo per leggera la tessera sanitaria con VBA. Qualcuno può aiutarmi?
  • Non ha senso scrivere in un thread di più di un anno fa
  • Scusa. Non volevo fare una nuova discussione con lo stesso titolo
  • E che facciamo una sola discussione per tutti?
Devi accedere o registrarti per scrivere nel forum
6 risposte