|
| lister le nom des lecteurs PC/SC branchés |
| Iniciado por webmaster, 02,dic. 2019 18:41 - 10 respuestas |
| |
| | | |
|
| |
| Publicado el 02,diciembre 2019 - 18:41 |
Bonjour,
J'essaye de lister le nom des lecteurs PC/SC branchés sur mon PC (il y en a 2 qui sont bien reconnu) J'ai testé le code suivant, il fonctionne mais il ne retourne qu'un seul de mes 2 lecteurs Avez-vous une idée du problème ? merci
int_gestionnaireDll est un entier sur 4 octets int_gestionnaireContexte est un entier sur 4 octets
int_resultatSCardEstablishContext est un entier sur 4 octets int_resultatSCardListReaders est un entier sur 4 octets
str_listeLecteur est une chaîne ASCIIZ sur 255 int_longueurListeLecteur est un entier sur 4 octets = 255
struct_ScardIoRequest est une Structure int_protocolCommunication est un entier sur 4 octets int_longueurStructure est un entier sur 4 octets FIN
int_gestionnaireDll = ChargeDLL("winscard.dll")
SI int_gestionnaireDll = 0 ALORS Erreur(ErreurInfo()) SINON Info("DLL chargée") FIN
int_resultatSCardEstablishContext = API("Winscard.dll","SCardEstablishContext",0,Null,Null,&int_gestionnaireContexte) IF int_resultatSCardEstablishContext = 0 ALORS Info("OK") ELSE Info("Erreur") END
int_resultatSCardListReaders = API ("Winscard.dll","SCardListReadersA",int_gestionnaireContexte,Null,&str_listeLecteur,&int_longueurListeLecteur)
Info(str_listeLecteur) // N'affiche qu'un seul nom de lecteur |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 03,diciembre 2019 - 09:50 |
Bonjour normal car suivant la doc str_listeLecteur est composée de "nom_1 0x00 nom_2 0x00 0x00" case SCARD_S_SUCCESS: // Do something with the multi string of readers. // Output the values. // A double-null terminates the list of values. pReader = pmszReaders; while ( '\0' != *pReader ) { // Display the value. printf("Reader: %S\n", pReader ); // Advance to the next value. pReader = pReader + wcslen((wchar_t *)pReader) + 1; }
-- L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. Quand un utilisateur vous a aidé, n'oubliez pas de le remercier... |
| |
| |
| | | |
|
| | |
| |
| Publicado el 04,diciembre 2019 - 09:21 |
>>normal car suivant la doc str_listeLecteur est composée de "nom_1 0x00 nom_2 0x00 0x00" case SCARD_S_SUCCESS:
Oui, j'ai bien vu ça Mais comment récupérer cette liste alors en Windev, car actuellement ma chaine ne contient que le premier nom et rien d'autre |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 04,diciembre 2019 - 14:37 |
Bonjour ce bout de code devrait vous aider
str_listeLecteur est une chaîne = "lecteur1"+Caract(0x00)+"lecteur2"+Caract(0x00)+Caract(0x00)
stringPtr est un entier système = &str_listeLecteur Lecteur est une chaîne = "" nOctet est un entier sans signe sur 1 octet LOOP Transfer(&nOctet, stringPtr, 1) IF nOctet = 0x00 THEN IF Lecteur = "" THEN SORTIR ELSE Trace(Lecteur) Lecteur = "" stringPtr++ END ELSE Lecteur += Caract(nOctet) stringPtr++ END END
"car actuellement ma chaine ne contient que le premier nom et rien d'autre" si elle contient des caractères 0x00 qui pour windev (et le C) signifie «fin de chaine» donc quand vous faites Info() vous ne voyez que la première chaine -- L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...Mensaje modificado, 04,diciembre 2019 - 14:42 |
| |
| |
| | | |
|
| | |
| |
| Publicado el 04,diciembre 2019 - 16:48 |
| Merci beaucoup, ça fonctionne |
| |
| |
| | | |
|
| | |
| |
| Publicado el 06,diciembre 2019 - 08:24 |
Je cherche maintenant a savoir si il y a une carte dans le lecteur Existe t'il une façon simple de faire ca. Je regarde du coté de SCardStatusA mais je bloque |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 06,diciembre 2019 - 12:19 |
Bonjour D'après ce que je viens de lire, il faut utiliser en premier «SCardConnectA» qui vous renvoie : Success SCARD_S_SUCCESS. ou An error code. For more information, see Smart Card Return Values -> https://docs.microsoft.com/fr-fr/windows/win32/secauthn/authentication-return-values
-- L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. Quand un utilisateur vous a aidé, n'oubliez pas de le remercier... |
| |
| |
| | | |
|
| | |
| |
| Publicado el 06,diciembre 2019 - 19:06 |
Merci, cependant J'ai testé le code suivant, mais à priori j'obtiens systématiquement une erreur, que mon lecteur contienne une carte ou pas
Le seule moment ou je n'ai pas d'erreur c'est quand je spécifie lp1 =3, mais dans ce cas j'obtiens toujours 0, avec ou sans carte
p1 est un entier sur 4 p2 est un entier sur 4 lp1 est un entier sur 4=0 lp2 est un entier sur 4=0
p1 est un entier sur 4 p2 est un entier sur 4 lp1 est un entier sur 4=2 lp2 est un entier sur 4=0
nresult is int = API("Winscard.dll","SCardConnectA",int_gestionnaireContexte,"Identive CLOUD 2700 R Smart Card Reader 0",lp1,lp2,&p1,&p2)
SI nresult<>0 ALORS Info("Erreur connexion "+nresult) ELSE Info("connexion ok") END |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 06,diciembre 2019 - 22:11 |
Bonsoir, Essayez de passer la chaine de caractères par adresse car la fonction attend un LPCSTR pour szReader
szReader est une chaîne ASCIIZ sur 64 = "Identive CLOUD 2700 R Smart Card Reader 0" API("Winscard.dll","SCardConnectA",int_gestionnaireContexte, &szReader, lp1,lp2,&p1,&p2)
-- L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...Mensaje modificado, 06,diciembre 2019 - 22:11 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 06,diciembre 2019 - 22:35 |
J'essaierais ces valeurs pour p1 et p2 :
SCARD_SHARE_SHARED: DWORD = 2 donc 2 pour p1 (dwShareMode)
SCARD_PROTOCOL_T0 = 1 SCARD_PROTOCOL_T1 = 2 donc 3 pour p2 (dwPreferredProtocols)
-- L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. Quand un utilisateur vous a aidé, n'oubliez pas de le remercier... |
| |
| |
| | | |
|
| | |
| |
| Publicado el 07,diciembre 2019 - 09:19 |
| |
| |
| | | |
|
| | | | |
| | |
|