Lire les données carte RFID (lecteur omnikey 5325 cl) en VBA [Résolu]

Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Dernière intervention
25 août 2015
- - Dernière réponse : cs_Isabelle31
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Dernière intervention
25 août 2015
- 25 août 2015 à 15:09
Bonjour,

Je suis en train de me casser la tête sur un sujet depuis quelques jours.
Je m'explique, je dois utiliser le lecteur de carte RFID (un lecteur USB OMNIKEY 5325 CL) avec une base de données Access 2010.
Je m'arrive pas a trouver des exemple de code en VBA ou VB6 qui pourrait m'indiquer comme récupérer l'ATR de la carte.
J'ai fais les différentes installation sur mon PC et l'outil d'OMNIKEY lit bien ma carte, mais je ne vois vraiment pas comment je dois faire pour la lire via un formulaire dans Access.

Merci d'avance pour votre aide.
Afficher la suite 

Votre réponse

12 réponses

Messages postés
12371
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 décembre 2018
0
Merci
Bonjour, apparemment il y a une API disponible sur le site du fabriquant.
https://www.hidglobal.fr/drivers/14980
Commenter la réponse de Whismeril
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Dernière intervention
25 août 2015
0
Merci
J'ai également trouvé cette API, mais je n'arrive pas a l'utiliser dans mon code VBA. J'ai bien fais toutes les déclarations, mais je ne trouve pas comment m'en servir. :-(
Commenter la réponse de cs_Isabelle31
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,
Les paramètres d'entrée des fonctions d'une librairie, ce que ces fonctions retournent, etc ... ne sauraient s'inventer.
Si ces spécifications de figurent pas dans la documentation accompagnant ton matériel, il t'appartient d'en demander la communication au fabricant (dans l'éventualité où il est disposé à le faire). Il est seul à le savoir.
Whismeril
Messages postés
12371
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 décembre 2018
-
Salut Uc, pas mieux.
Commenter la réponse de ucfoutu
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Dernière intervention
25 août 2015
0
Merci
J'ai fait une demande au fabriquant mais je suis toujours en attente d'un retour de leur part...
Commenter la réponse de cs_Isabelle31
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Dernière intervention
25 août 2015
0
Merci
voila la réponse du fabriquant :
Probleme:
Comment lire l'ATR ou UID d'une carte avec Omnikey?

Solution:
Les commandes requises:
SCardEstablishContext
SCardListReaders Pour selectioner le lecteur
SCardGetStatusChange Pour idenfier le changement sur une carte (read ATR)
SCardStatus Pour lire le status de la carte (read ATR)
SCardConnect Pour se connectera la carte
SCardTransmit Pour lire l'UID ( (Pour des APDU's qui marchent sur des cartes qui supportent T=0, T=1 or T=CL protocol for GET UID is 0xFF 0xCA 0x00 0x00 0x00)
Si l'APDU ne marche pas, cela veut dire que autres commandes ou APDU seraient necesaires.
S'il vous plait, verifie la documentation de la carte que vous avez obtenu de la part du foruniseur.



Par contre ca ne m'avance pas beaucoup
Commenter la réponse de cs_Isabelle31
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
Ce qui veut dire que ton matériel utilise les fonctions de la librairie Winscard.dll.
Tu trouveras là ===>>>
http://www.codeforge.com/article/78554
un projet complet écrit en VB6, dont tu devras t'inspirer (s'agissant de la déclaration et de l'utilisation des fonctions : aucune différence entre VBA et VB6).
Je ne peux rien tester à ta place (en l'absence de lecteur de carte).
J'imagine que tu devras, à un moment où à l'autre, donner le nom du lecteur (chaîne de caractères). Il sera important que ce nom soit parfaitement exact. Cela devrait figurer dans ta documentation (celle livrée avec ton matériel).
C'est tout ce que je peux faire à ce stade pour t'aider
Commenter la réponse de ucfoutu
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Dernière intervention
25 août 2015
0
Merci
Je suis désolée, mais 2 problèmes se posent, je ne peux pas télécharger le code. Et ensuite je n'ai rien pour ouvrir un code en VB6.
Commenter la réponse de cs_Isabelle31
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
1) Lis bien tous les onglets du site (l'un d'entre eux permet le téléchargement)
2) tous les fichiers VB6 sont éditables avec le bloc-notes (pour en lire le code)
T'intéressent principalement : le fichier ICWinscard.bas et le fichier IC_CPU.frm (ce sont ces deux fichiers, qui contiennent les lignes de code qui t'intéressent).
Désolé, mais je ne peux aller au-delà...
Bonne chance
Commenter la réponse de ucfoutu
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Dernière intervention
25 août 2015
0
Merci
Bon j'ai encore un peu avancé. (par contre je ne peux pas télécharger l'exemple qui est payant)
Je suis bloquée sur le SCardTransmit, je n'arrive pas a lui passer les bons paramètres.

Est-ce que quelqu'un sait l'utiliser?

Merci d'avance.
Commenter la réponse de cs_Isabelle31
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
Tu trouveras tout là ===>>>
http://pcsclite.alioth.debian.org/api/group__API.html#ga18f33eebb45d9e0d2a091ca7a0511d26
chacun des paramètres (cliquable) y est exposé de manière claire.
Commenter la réponse de ucfoutu
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Dernière intervention
25 août 2015
0
Merci
Bonjour,

Merci a tous pour votre aide.
Après un retour du fournisseur, le lecteur que j'utilise ne fonctionne pas totalement pour récupérer le code UID de la carte. Je dois donc me contenter du code ATR en hexadécimal.

Je vais finaliser mon code et je le posterais, on sait jamais si ca peut aider quelqu'un.
Commenter la réponse de cs_Isabelle31
Messages postés
80
Date d'inscription
mardi 20 juillet 2004
Dernière intervention
25 août 2015
0
Merci
Bonjour a tous,
Je poste donc le code que j'ai utilisé pour récupérer le code Hexa d'une carte.
En espérant que ca pourra aider quelqu'un.

'**************************************************************************
' winscard.dll Visual Basic Function Prototypes
'**************************************************************************
'SCardAccessStartedEvent
'http://msdn.microsoft.com/en-us/library/aa379466(VS.85).aspx
'HANDLE STDCALL SCardAccessStartedEvent(VOID)
Public Declare Function SCardAccessStartedEvent Lib "winscard.dll" () As Long

Public Type SCARD_READERSTATE
szReader As String
pvUserData As Long
dwCurrentState As Long
dwEventState As Long
cbAtr As Long
rgbAtr As Byte
End Type
'http://msdn.microsoft.com/en-us/library/aa922903.aspx
Public Type SCARD_ATRMASK
cbAtr As Long
rgbAtr As Byte
rgbMask As Byte
End Type
'http://msdn.microsoft.com/en-us/library/aa379807.aspx
Public Type SCARD_IO_REQUEST
dwProtocol As Long
dwPciLength As Long
End Type

'SCardAddReaderToGroup
'LONG STDCALL SCardAddReaderToGroupA(SCARDCONTEXT(in), LPCSTR(in), LPCSTR(in))
Public Declare Function SCardAddReaderToGroup Lib "winscard.dll" Alias "SCardAddReaderToGroupA" ( _
ByVal hContext As Long, _
ByVal szReaderName As String, _
ByVal szGroupName As String _
) As Long

'SCardBeginTransaction
'LONG STDCALL SCardBeginTransaction(SCARDHANDLE(in))
Public Declare Function SCardBeginTransaction Lib "winscard.dll" ( _
ByVal hCard As Long _
) As Long

'SCardCancel
'LONG STDCALL SCardCancel(SCARDCONTEXT(in))
Public Declare Function SCardCancel Lib "winscard.dll" ( _
ByVal hContext As Long _
) As Long

'SCardConnect
'LONG STDCALL SCardConnectA(SCARDCONTEXT(in), LPCSTR(in), DWORD(in), DWORD(in),
' LPSCARDHANDLE(out), LPDWORD(out))
Public Declare Function SCardConnect Lib "winscard.dll" Alias "SCardConnectA" ( _
ByVal hContext As Long, _
ByVal szReader As String, _
ByVal dwShareMode As Long, _
ByVal dwPreferredProtocols As Long, _
ByRef phCard As Long, _
ByRef pdwActiveProtocol As Long _
) As Long

'SCardControl
'LONG STDCALL SCardControl(SCARDHANDLE(in), DWORD(in), LPCVOID(in), DWORD(in),
' LPVOID(out), DWORD(in), LPDWORD(out))
Public Declare Function SCardControl Lib "winscard.dll" ( _
ByVal hCard As Long, _
ByVal dwControlCode As Long, _
ByRef lpInBuffer As Long, _
ByVal nInBufferSize As Long, _
ByRef lpOutBuffer As Long, _
ByVal nOutBufferSize As Long, _
ByRef lpBytesReturned As Long _
) As Long

'SCardDisconnect
'LONG STDCALL SCardDisconnect(SCARDHANDLE(in), DWORD(in))
Public Declare Function SCardDisconnect Lib "winscard.dll" ( _
ByVal hCard As Long, _
ByVal dwDisposition As Long _
) As Long

'SCardEndTransaction
'LONG STDCALL SCardEndTransaction(SCARDHANDLE(in), DWORD(in))
Public Declare Function SCardEndTransaction Lib "winscard.dll" ( _
ByVal hCard As Long, _
ByVal dwDisposition As Long _
) As Long

'SCardEstablishContext
'LONG STDCALL SCardEstablishContext(DWORD(in), LPCVOID(in), LPCVOID(in),
' LPSCARDCONTEXT(out))
Public Declare Function SCardEstablishContext Lib "winscard.dll" ( _
ByVal dwScope As Long, _
ByVal pvReserved1 As Long, _
ByVal pvReserved2 As Long, _
ByRef phContext As Long _
) As Long

'SCardForgetCardType
'LONG STDCALL SCardForgetCardTypeA(SCARDCONTEXT(in), LPCSTR(in))
Public Declare Function SCardForgetCardType Lib "winscard.dll" Alias "SCardForgetCardTypeA" ( _
ByVal hContext As Long, _
ByVal szCardName As String _
) As Long

'SCardForgetReader
'LONG STDCALL SCardForgetReaderA(SCARDCONTEXT(in), LPCSTR(in))
Public Declare Function SCardForgetReader Lib "winscard.dll" Alias "SCardForgetReaderA" ( _
ByVal hContext As Long, _
ByVal szReaderName As String _
) As Long

'SCardForgetReaderGroup
'LONG STDCALL SCardForgetReaderGroupA(SCARDCONTEXT(in), LPCSTR(in))
Public Declare Function SCardForgetReaderGroup Lib "winscard.dll" Alias "SCardForgetReaderGroupA" ( _
ByVal hContext As Long, _
ByVal szGroupName As String _
) As Long

'SCardFreeMemory
'LONG STDCALL SCardFreeMemory(SCARDCONTEXT(in), LPCVOID(in))
Public Declare Function SCardFreeMemory Lib "winscard.dll" ( _
ByVal hContext As Long, _
ByVal pvMem As Long _
) As Long

'SCardGetAttrib
'LONG STDCALL SCardGetAttrib(SCARDHANDLE(in), DWORD(in), LPBYTE(out), LPDWORD(inout))
Public Declare Function SCardGetAttrib Lib "winscard.dll" ( _
ByVal hCard As Long, _
ByVal dwAttrId As Long, _
ByRef pbAttr As ByteArray, _
ByRef pcbAttrLen As Long _
) As Long

'SCardGetCardTypeProviderName
'LONG STDCALL SCardGetCardTypeProviderNameA(SCARDCONTEXT(in), LPCSTR(in), DWORD(in),
' LPSTR(out), LPDWORD(inout))
Public Declare Function SCardGetCardTypeProviderName Lib "winscard.dll" Alias "SCardGetCardTypeProviderNameA" ( _
ByVal hContext As Long, _
ByVal szCardName As String, _
ByVal dwProviderId As Long, _
ByVal szProvider As String, _
ByRef pcchProvider As Long _
) As Long

'SCardGetProviderId
'LONG STDCALL SCardGetProviderIdA(SCARDCONTEXT(in), LPCSTR(in), LPGUID(out))
Public Declare Function SCardGetProviderId Lib "winscard.dll" Alias "SCardGetProviderIdA" ( _
ByVal hContext As Long, _
ByVal szCard As String, _
ByRef pguidProviderId As GUID _
) As Long

'SCardGetStatusChange
'LONG STDCALL SCardGetStatusChangeA(SCARDCONTEXT(in), DWORD(in),
' LPSCARD_READERSTATEA(inout), DWORD(in))
Public Declare Function SCardGetStatusChange Lib "winscard.dll" Alias "SCardGetStatusChangeA" ( _
ByVal hContext As Long, _
ByVal dwTimeout As Long, _
ByRef rgReaderStates() As SCARD_READERSTATE, _
ByVal cReaders As Long _
) As Long

'SCardIntroduceCardType
'LONG STDCALL SCardIntroduceCardTypeA(SCARDCONTEXT(in), LPCSTR(in), LPCGUID(in),
' LPCGUID(in), DWORD(in), LPCBYTE(in), LPCBYTE(in), DWORD(in))
Public Declare Function SCardIntroduceCardType Lib "winscard.dll" Alias "SCardIntroduceCardTypeA" ( _
ByVal hContext As Long, _
ByVal szCardName As String, _
ByRef pguidPrimaryProvider As GUID, _
ByRef pguidInterfaces As GUID, _
ByVal dwInterfaceCount As Long, _
ByVal pbAtr As ByteArray, _
ByVal pbAtrMask As ByteArray, _
ByVal cbAtrLen As Long _
) As Long

'SCardIntroduceReader
'LONG STDCALL SCardIntroduceReaderA(SCARDCONTEXT(in), LPCSTR(in), LPCSTR(in))
Public Declare Function SCardIntroduceReader Lib "winscard.dll" Alias "SCardIntroduceReaderA" ( _
ByVal hContext As Long, _
ByVal szReaderName As String, _
ByVal szDeviceName As String _
) As Long

'SCardIntroduceReaderGroup
'LONG STDCALL SCardIntroduceReaderGroupA(SCARDCONTEXT(in), LPCSTR(in))
Public Declare Function SCardIntroduceReaderGroup Lib "winscard.dll" Alias "SCardIntroduceReaderGroupA" ( _
ByVal hContext As Long, _
ByVal szGroupName As String _
) As Long

'SCardIsValidContext
'LONG STDCALL SCardIsValidContext(SCARDCONTEXT(in))
Public Declare Function SCardIsValidContext Lib "winscard.dll" ( _
ByVal hContext As Long _
) As Long

'SCardListCards
'LONG STDCALL SCardListCardsA(SCARDCONTEXT(in), LPCBYTE(in), LPCGUID(in), DWORD(in),
' LPCSTR(out), LPDWORD(inout))
Public Declare Function SCardListCards Lib "winscard.dll" Alias "SCardListCardsA" ( _
ByVal hContext As Long, _
ByVal pbAtr As ByteArray, _
ByVal rgguidInterfaces As Long, _
ByVal cguidInterfaceCount As Long, _
ByVal mszCards As String, _
ByRef pcchCards As Long _
) As Long

'SCardListInterfaces
'LONG STDCALL SCardListInterfacesA(SCARDCONTEXT(in), LPCSTR(in), LPGUID(out),
' LPDWORD(inout))
Public Declare Function SCardListInterfaces Lib "winscard.dll" Alias "SCardListInterfacesA" ( _
ByVal hContext As Long, _
ByVal szCard As String, _
ByRef pguidInterfaces As GUID, _
ByRef pcguidInterfaces As Long _
) As Long

'SCardListReaderGroups
'LONG STDCALL SCardListReaderGroupsA(SCARDCONTEXT(in), LPSTR(out), LPDWORD(inout))
Public Declare Function SCardListReaderGroups Lib "winscard.dll" Alias "SCardListReaderGroupsA" ( _
ByVal hContext As Long, _
ByVal mszGroups As String, _
ByRef pcchGroups As Long _
) As Long

'SCardListReaders
'LONG STDCALL SCardListReadersA(SCARDCONTEXT(in), LPCSTR(in), LPSTR(out), LPDWORD(inout))
Public Declare Function SCardListReaders Lib "winscard.dll" Alias "SCardListReadersA" ( _
ByVal hContext As Long, _
ByVal mszGroups As String, _
ByVal mszReaders As String, _
ByRef pcchReaders As Long _
) As Long

'SCardLocateCards
'LONG STDCALL SCardLocateCardsA(SCARDCONTEXT(in), LPCSTR(in),
' LPSCARD_READERSTATEA(inout), DWORD(in))
Public Declare Function SCardLocateCards Lib "winscard.dll" Alias "SCardLocateCardsA" ( _
ByVal hContext As Long, _
ByVal mszCards As String, _
ByRef rgReaderStates() As SCARD_READERSTATE, _
ByVal cReaders As Long _
) As Long

'SCardLocateCardsByATR
'LONG STDCALL SCardLocateCardsByATRA(SCARDCONTEXT(in), LPSCARD_ATRMASK(in), DWORD(in),
' LPSCARD_READERSTATEA(inout), DWORD(in))
Public Declare Function SCardLocateCardsByATR Lib "winscard.dll" Alias "SCardLocateCardsByATRA" ( _
ByVal hContext As Long, _
ByRef rgAtrMasks() As SCARD_ATRMASK, _
ByVal cAtrs As Long, _
ByRef rgReaderStates() As SCARD_READERSTATE, _
ByVal cReaders As Long _
) As Long

'SCardReconnect

'LONG STDCALL SCardReconnect(SCARDHANDLE(in), DWORD(in), DWORD(in), DWORD(in),
' LPDWORD(out))
Public Declare Function SCardReconnect Lib "winscard.dll" ( _
ByVal hCard As Long, _
ByVal dwShareMode As Long, _
ByVal dwPreferredProtocols As Long, _
ByVal dwInitialization As Long, _
ByRef pdwActiveProtocol As Long _
) As Long

'SCardReleaseContext

'LONG STDCALL SCardReleaseContext(SCARDCONTEXT(in))
Public Declare Function SCardReleaseContext Lib "winscard.dll" ( _
ByVal hContext As Long _
) As Long

'SCardReleaseStartedEvent

'VOID STDCALL SCardReleaseStartedEvent(HANDLE(in))
Public Declare Sub SCardReleaseStartedEvent Lib "winscard.dll" ( _
ByVal hStartedEventHandle As Long _
)

'SCardRemoveReaderFromGroup

'LONG STDCALL SCardRemoveReaderFromGroupA(SCARDCONTEXT(in), LPCSTR(in), LPCSTR(in))
Public Declare Function SCardRemoveReaderFromGroup Lib "winscard.dll" Alias "SCardRemoveReaderFromGroupA" ( _
ByVal hContext As Long, _
ByVal szReaderName As String, _
ByVal szGroupName As String _
) As Long

'SCardSetAttrib
'LONG STDCALL SCardSetAttrib(SCARDHANDLE(in), DWORD(in), LPCBYTE(in), DWORD(in))
Public Declare Function SCardSetAttrib Lib "winscard.dll" ( _
ByVal hCard As Long, _
ByVal dwAttrId As Long, _
ByVal pbAttr As ByteArray, _
ByVal cbAttrLen As Long _
) As Long

'SCardSetCardTypeProviderName
'LONG STDCALL SCardSetCardTypeProviderNameA(SCARDCONTEXT(in), LPCSTR(in), DWORD(in),
' LPCSTR(in))
Public Declare Function SCardSetCardTypeProviderName Lib "winscard.dll" Alias "SCardSetCardTypeProviderNameA" ( _
ByVal hContext As Long, _
ByVal szCardName As String, _
ByVal dwProviderId As Long, _
ByVal szProvider As String _
) As Long

'SCardState
'LONG STDCALL SCardState(SCARDHANDLE(in), LPDWORD(out), LPDWORD(out), LPBYTE(out),
' LPDWORD(out))
Public Declare Function SCardState Lib "winscard.dll" ( _
ByVal hCard As Long, _
ByRef pdwState As Long, _
ByRef pdwProtocol As Long, _
ByRef pbAtr As ByteArray, _
ByRef pcbAtrLen As Long _
) As Long

'SCardStatus
'LONG STDCALL SCardStatusA(SCARDHANDLE(in), LPSTR(out), LPDWORD(inout), LPDWORD(out),
' LPDWORD(out), LPBYTE(out), LPDWORD(inout))
Public Declare Function SCardStatus Lib "winscard.dll" Alias "SCardStatusA" ( _
ByVal hCard As Long, _
ByVal szReaderName As String, _
ByRef pcchReaderLen As Long, _
ByRef pdwState As Long, _
ByRef pdwProtocol As Long, _
ByRef pbAtr As ByteArray, _
ByRef pcbAtrLen As Long _
) As Long

'SCardTransmit
'LONG STDCALL SCardTransmit(SCARDHANDLE(in), LPCSCARD_IO_REQUEST(in), LPCBYTE(in),
' DWORD(in), LPSCARD_IO_REQUEST(inout), LPBYTE(out), LPDWORD(inout))
Public Declare Function SCardTransmit Lib "winscard.dll" ( _
ByVal hCard As Long, _
ByRef pioSendPci As SCARD_IO_REQUEST, _
ByRef pbSendBuffer As Byte, _
ByVal cbSendLength As Long, _
ByRef pioRecvPci As SCARD_IO_REQUEST, _
ByRef pbRecvBuffer As Byte, _
ByRef pcbRecvLength As Long _
) As Long

Public Declare Function SCardTransmitLong Lib "winscard.dll" Alias "SCardTransmit" ( _
ByVal hCard As Long, _
ByRef pioSendPci As SCARD_IO_REQUEST, _
ByRef pbSendBuffer As Byte, _
ByVal cbSendLength As Long, _
ByVal pioRecvPci As Long, _
ByRef pbRecvBuffer As Byte, _
ByRef pcbRecvLength As Long _
) As Long



'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Public Function ReadBadge() As String
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() As Byte
Dim recvbuff(256) As ByteArray
Dim Smem As Integer
Dim i As Integer
Dim chaine_hexa As String
Dim scad_leave_card As Long

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)

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

retval = SCardConnect(hContext, readers, scard_share_shared, scard_protocol_t0_or_t1, hCard, activeprotocol)
If retval <> 0 Then MsgBox "erreur SCardConnect n. " & CStr(retval)


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

bytArray = recvbuff(0).B

For i = 0 To recvlen - 1
chaine_hexa = bytArray(i)
strHexa = strHexa & " " & Format(decimal_en_hexadecimal(chaine_hexa), "00")
Next i

retval = SCardDisconnect(hCard, scad_leave_card)
If retval <> 0 Then MsgBox "erreur SCardDisconnect n. " & CStr(retval)

retval = SCardReleaseContext(hContext)
If retval <> 0 Then MsgBox "erreur SCardReleaseContext n. " & CStr(retval)

ReadBadge = Trim(strHexa)

End Function

Commenter la réponse de cs_Isabelle31

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.