PatrickYohann
Messages postés10Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention 7 juin 2010 7 déc. 2009 à 13:52
Merci à JACK qui a donné la réponse dans son premier message. Pardonnez mes questions, je ne suis pas particulièrement doué en vba, et ça, je l'avais déjà signifié à l'auteur de ce code.
Pour RENFIELD: Non, le numéro de la partition sur chaque machine ne sera pas identique. Sur la machine qui est destinée à recevoir l'application, on s'arrange pour afficher dans des textboxs le SerialHDD et le nom d'utilisateur. Le client recueille ces informations et me les communique car il n'a pas le bout de code qui permet de générer un Serial (C'est fait exprès!). Il n'a que le code qui permet de vérifier le Serial que moi je vais lui fournir sur la base des renseignements qu'il m'a communiqués par phone ou mail.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 déc. 2009 à 09:31
"DoCmd" + "champ SerialGénéré" : Ne serais-tu pas dans une DB ?
Si tu as des soucis de compréhension du langage, il vaudrait mieux poser une question claire et détaillée sur le forum en précisant bien dans quel environnement tu te trouves
Les commentaires de sources ne sont pas fait pour débuguer les adaptations du code présenté.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 déc. 2009 à 09:28
?
Bah
maTextBox.Text = GenererSerial3(Param1, Param2, Param3)
(je ne vois pas trop d'où vient ce DoCmd ... Tu programmes dans quoi ? VBA, VB6 ?)
Si l'erreur persiste, il faut lancer le programme avec F8 pour exécuter pas à pas le programme et voir en détail quelle instruction provoque cette erreur + vérifier le contenu de chaque variable impliquée.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 déc. 2009 à 09:27
numéro de série de l apartition? ça ne va pas, donc, si on ghost la chose : le numéro sur chaque machine sera identique.
PatrickYohann
Messages postés10Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention 7 juin 2010 7 déc. 2009 à 08:23
C'est exactement ce que j'ai fait. La preuve c'est que sur le premier lien que j'ai donné, le serial généré s'affiche bien.
Comment donc l'afficher dans le champ "SerialGénéré" par clic sur un bouton de commande? Telle demeure ma préoccupation.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 déc. 2009 à 23:55
Telle qu'elle existe dans la souce ici présente, la fonction GenereSerial3 n'accepte que 2 paramètres, pas 3.
Dans ton cas, si tu veux passer le SerialHD en paramètre (au lieu de lancer son calcul à l'intérieur de la fonction), il te faut :
- modifier la déclaration de la fonction :
Public Function GenererSerial3(GS3Nom As String, GS3IDProg As String, Toto As String) As String
- Remplacer l'appel de calcul existant par ta chaine
For i = 1 To Len(SerialHDD("C:"))
CRCHDD = CRCHDD + Asc(Mid(SerialHDD("C:"), i, 1))
deviennent
For i = 1 To Len(Toto)
CRCHDD = CRCHDD + Asc(Mid(Toto, i, 1))
PatrickYohann
Messages postés10Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention 7 juin 2010 6 déc. 2009 à 20:56
Salut Tioneb.
Les choses avancent bien, je suis presqu'à la fin du test.
J'ai passé en paramètre le serialHDD comme indiqué plus haut et dans mon formulaire, le serial est bel et bien généré après renseignement des champs NomUtilisateur, ID_Produit et SerialHDD. La propriété "Source contrôle" du champ "SerialGénéré" est: =GenereSerial3([NomUtilisateur]; [ID_Produit]; [SerialHDD])
Voir ici: http://www.cijoint.fr/cjlink.php?file=cj200912/cijTHCB5lK.jpg
Ce que je voudrais, c'est renseigner les champs NomUtilisateur, ID_Produit et SerialHDD puis cliquer sur le bouton Générer pour afficher le serial dans le champ "SerialGénéré".
Quel code faut-il mettre sur le bouton? Jai mis le code suivant:
DoCmd.Open function GenereSerial3(Me.NomUtilisateur, Me.ID_Produit, Me. SerialHDD) mais il me renvoie l'erreur suivante:
http://www.cijoint.fr/cjlink.php?file=cj200912/cijF7p3UDF.jpg
J'ai besoin d'aide.
PatrickYohann
Messages postés10Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention 7 juin 2010 3 déc. 2009 à 00:22
cs_Tioneb
Messages postés193Date d'inscriptiondimanche 16 décembre 2001StatutMembreDernière intervention29 juillet 2015 2 déc. 2009 à 17:35
En fait tu peux mettre l'information que tu veux en lieu et place du SerialHDD. Si tu veux mettre le numéro de série de windows, de la carte graphique ou autre, tu peux.
PatrickYohann
Messages postés10Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention 7 juin 2010 2 déc. 2009 à 14:31
Exact!! Mais alors je suis un peu inquiet.
En effet avec le code de 3stone, le numéro renvoyé pour ma clé USB était différent avant et après le formatage. Et comme les 2 codes renvoient la même chose, cela signifie que ton code, contrairement à ce que tu as dit, n'affichera pas le même numéro de série à la suite d'un formatage.
Alors, ne serait-ce pas toujours le numéro de série de la partition qui change à chaque formatage comme tu l'as indiqué en intro?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 2 déc. 2009 à 10:13
Le trait d'union n'est qu'une manière de représenter la donnée, rien de plus.
Parce que le chiffre négatif est la représentation décimale (Long, je suppose)
Il te suffit de le convertir en hexa pour retrouver l'autre : -727593647 --> FFFFFFFFD4A1CD51
PatrickYohann
Messages postés10Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention 7 juin 2010 1 déc. 2009 à 23:39
J'allais oublier!
Une question cependant: Chez moi le "SerialHDD" renvoyé par ta fonction est D4A1-CD51. Est-ce que pour générer un serial je le saisi tel qu'il est, avec le trait d'union?
Par ailleurs j'ai aussi trouvé un code ici:
http://www.3stone.be/access/faq.php?lng=fr&pg=362 qui est sensé renvoyer lui aussi le numéro du disque dur, mais il renvoie un numéro différent (négatif), à savoir -727593647. Pourquoi deux numéros différents pour le même DD?
PatrickYohann
Messages postés10Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention 7 juin 2010 1 déc. 2009 à 23:13
En effet en suivant de plus près, j'étais également arrivé à cette conclusion: passer en paramètre le "SerialHDD". Je vais donc devoir modifier un tout petit peu ton code. Je crois pouvoir me débrouiller tout seul. Mais si jamais ça coince quelque part, je reviendrai te voir.
cs_Tioneb
Messages postés193Date d'inscriptiondimanche 16 décembre 2001StatutMembreDernière intervention29 juillet 2015 1 déc. 2009 à 20:02
PatrickYohann: Dans ton programme, quand l'utilisateur voudra enregistrer sa copie, tu devras, d'une manière ou d'une autre récupérer le numéro de série de la partition, le nom d'utilisateur (que l'utilisateur devra spécifier dans un champs que tu aura créé). Pour bien, il aurait fallu que je passe le "SerialHDD" en paramètre dans la fonction de génération du serial.
Une fois que tu reçois ces informations, tu peux générer un serial.
PatrickYohann
Messages postés10Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention 7 juin 2010 1 déc. 2009 à 12:09
Bonjour à tous.
Je voudrais tester ce code mais étant débutant, je ne sais pas comment le faire. J'ai bien créé un module dans lequel j'ai copié le code, j'ai pu obtenir le numéro de série du disque dur, j'ai pu générer des serials dans une zone de texte d'un formulaire, mais tout cela ne suffit pas.
Selon moi, puisque le serial généré tient compte du numéro de série du disque dur, on est donc tenu de le générer depuis le poste sur lequel est installée l'application à protéger.
Bref, aidez-moi à utiliser ce code, dans le détail.
kkZ
Messages postés19Date d'inscriptionmercredi 19 décembre 2001StatutMembreDernière intervention30 avril 2008 29 avril 2008 à 02:13
Je ne baserai rien sur l'adrese mac d'une carte réseau. Il existe des logiciels (VIAMAX pour ne pas citer de nom) qui permettent de changer aisément l'adresse mac d'une carte réseau (selon constructeur) et plus facilement sur les hauts de gamme (3COM,...). Méthode à proscrire.
Se baser sur le numéro de série, et:/ou, modèle de disque c'est tout bon et infalsifiable (même pour les costauds).
Je ne recommande pas l'utilisation des FSO en général... mais plûtot les API.
romanov1985
Messages postés1Date d'inscriptionsamedi 11 novembre 2006StatutMembreDernière intervention10 mars 2007 10 mars 2007 à 18:26
merci man
cs_DarkVader
Messages postés51Date d'inscriptionsamedi 21 octobre 2000StatutMembreDernière intervention10 octobre 2011 15 janv. 2007 à 12:11
Brunews t'a fourni la solution avec uuidcreatesequential que tu peux éventuellement coder avec un algo perso
car ton source ne fait que retourner le n°de volume du disque dur en hexadecimal (ce que tu peux obtenir en 2 lignes avec le filesystemobject)
Dim fso As New FileSystemObject
ret = Hex(fso.GetDrive("C:/").SerialNumber)
Ce numero est nouveau à chaque formatage contrairement au n° de série réel du HD
ou comme on te l'a également indiqué de l'adresse MAC (qui sert d'ailleurs de base à uuidcreatesequential).
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 14 janv. 2007 à 15:14
Pour ma part, je mettrai un autre 10, quand les variables seront indicées dans un tableau. C'est la carotte ! :-);
Amicalement,
Us.
cs_Tioneb
Messages postés193Date d'inscriptiondimanche 16 décembre 2001StatutMembreDernière intervention29 juillet 2015 12 janv. 2007 à 23:11
us_30: c'est vrai qu'il aurait plutot fallut utiliser un tableau pour gérer tout ça; mais je n'ai pas l'habitude d'en utiliser. Je sais, c'est un tort!
Sinon, y'a pas mal de commentaires (merci) et pas une note!!! Aller, un petit effort....
Bonjour/Bonsoir,
Merci d'avoir pris la peine de répondre.
Malheureusement je ne sait ce que veux dire WMI.
Excusé l'ignorance.
Merci.
PS.: de toute façon le moment venu je ferais le test, parce-que je crois que ce code pourras me rendre service.
Merci encore
zoltar35
Messages postés3Date d'inscriptionlundi 30 décembre 2002StatutMembreDernière intervention12 janvier 2007 12 janv. 2007 à 21:56
Avec WMI je pense que le code peut être compatible vb6-->vb2005
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 12 janv. 2007 à 21:34
Bonsoir,
Sur le code en lui-même, la structure :
Caractere = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim a1 As Long, b1 As Long, c1 As Long, d1 As Long, e1 As Long
Dim a2 As Long, b2 As Long, c2 As Long, d2 As Long, e2 As Long
Dim a3 As Long, b3 As Long, c3 As Long, d3 As Long, e3 As Long
Dim a4 As Long, b4 As Long, c4 As Long, d4 As Long, e4 As Long
Dim a5 As Long, b5 As Long, c5 As Long, d5 As Long, e5 As Long
'et zioup, on chercher un serial compatible
BoucleGS3:
Iteration = Iteration + 1
a1 = Aleatoire(1, 36)
b1 = Aleatoire(1, 36)
c1 = Aleatoire(1, 36)
d1 = Aleatoire(1, 36)
e1 = Aleatoire(1, 36)
a2 = Aleatoire(1, 36)
b2 = Aleatoire(1, 36)
etc... Gagnerai à être mis dans un tableau indicé. Ce qui permettra de réduire notoirement le listing...
Amicalement,
Us.
cs_Tioneb
Messages postés193Date d'inscriptiondimanche 16 décembre 2001StatutMembreDernière intervention29 juillet 2015 12 janv. 2007 à 18:15
DJMCG: Je ne sais pas si c'est compatible vb 2005 mais ça utilise des api de windows des et fonctions classiques de vb donc pour moi ça doit passer. Mais maintenant faut voir au niveau programmation (vb6 est pas pareil que vb.net)
Bonjour,
Ce code, peut'il être appliqué en vb 2005.
Merci.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 janv. 2007 à 17:20
Utiliser API UuidCreateSequential().
cs_Tioneb
Messages postés193Date d'inscriptiondimanche 16 décembre 2001StatutMembreDernière intervention29 juillet 2015 11 janv. 2007 à 16:21
Oui, mais si l'utilisateur n'a pas de carte réseau (ça devient de plus en plus rare) ça ne marchera pas. Et s'il en possède plusieurs, je ne sais pas comment ça va tourner ce truc!
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 11 janv. 2007 à 13:49
ok, merci Renfield ^^
@+
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 11 janv. 2007 à 13:43
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 11 janv. 2007 à 13:36
donc en C ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 janv. 2007 à 12:08
Via la BDD on n'en change que le nro que Win retient après le boot, le vrai nro est en dur dans le matos donc se régénère quand on veut. L'adresse MAC est donc absolument fiable si on sait la lire à la source avec du vrai code (comme d'hab...).
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 11 janv. 2007 à 08:41
BDD => BDR (Base de registres), je suppose :p
e_NeX
Messages postés104Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention30 novembre 2009 11 janv. 2007 à 04:48
mais non faut jamais utiliser l'adresse MAC de la carte réseau!
ca se change hyper-facilement via la BDD!
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 10 janv. 2007 à 23:39
Salut
Comme autre idée, tu peux utiliser l'adresse MAC de ta carte réseau ... à condition que le PC en soit équipé ...
Elle est normalement unique au monde.
Pour lire la tienne :
- Démarrer, Exécuter, "cmd" + enter
- Dans la console qui s'affiche, tape "getmac" + enter
Si vous n'avez pas de carte réseau, je serais curieux de savoir ce que GetMac répond.
7 déc. 2009 à 13:52
Pour RENFIELD: Non, le numéro de la partition sur chaque machine ne sera pas identique. Sur la machine qui est destinée à recevoir l'application, on s'arrange pour afficher dans des textboxs le SerialHDD et le nom d'utilisateur. Le client recueille ces informations et me les communique car il n'a pas le bout de code qui permet de générer un Serial (C'est fait exprès!). Il n'a que le code qui permet de vérifier le Serial que moi je vais lui fournir sur la base des renseignements qu'il m'a communiqués par phone ou mail.
7 déc. 2009 à 09:31
Si tu as des soucis de compréhension du langage, il vaudrait mieux poser une question claire et détaillée sur le forum en précisant bien dans quel environnement tu te trouves
Les commentaires de sources ne sont pas fait pour débuguer les adaptations du code présenté.
7 déc. 2009 à 09:28
Bah
maTextBox.Text = GenererSerial3(Param1, Param2, Param3)
(je ne vois pas trop d'où vient ce DoCmd ... Tu programmes dans quoi ? VBA, VB6 ?)
Si l'erreur persiste, il faut lancer le programme avec F8 pour exécuter pas à pas le programme et voir en détail quelle instruction provoque cette erreur + vérifier le contenu de chaque variable impliquée.
7 déc. 2009 à 09:27
7 déc. 2009 à 08:23
Comment donc l'afficher dans le champ "SerialGénéré" par clic sur un bouton de commande? Telle demeure ma préoccupation.
6 déc. 2009 à 23:55
Dans ton cas, si tu veux passer le SerialHD en paramètre (au lieu de lancer son calcul à l'intérieur de la fonction), il te faut :
- modifier la déclaration de la fonction :
Public Function GenererSerial3(GS3Nom As String, GS3IDProg As String, Toto As String) As String
- Remplacer l'appel de calcul existant par ta chaine
For i = 1 To Len(SerialHDD("C:"))
CRCHDD = CRCHDD + Asc(Mid(SerialHDD("C:"), i, 1))
deviennent
For i = 1 To Len(Toto)
CRCHDD = CRCHDD + Asc(Mid(Toto, i, 1))
6 déc. 2009 à 20:56
Les choses avancent bien, je suis presqu'à la fin du test.
J'ai passé en paramètre le serialHDD comme indiqué plus haut et dans mon formulaire, le serial est bel et bien généré après renseignement des champs NomUtilisateur, ID_Produit et SerialHDD. La propriété "Source contrôle" du champ "SerialGénéré" est: =GenereSerial3([NomUtilisateur]; [ID_Produit]; [SerialHDD])
Voir ici: http://www.cijoint.fr/cjlink.php?file=cj200912/cijTHCB5lK.jpg
Ce que je voudrais, c'est renseigner les champs NomUtilisateur, ID_Produit et SerialHDD puis cliquer sur le bouton Générer pour afficher le serial dans le champ "SerialGénéré".
Quel code faut-il mettre sur le bouton? Jai mis le code suivant:
DoCmd.Open function GenereSerial3(Me.NomUtilisateur, Me.ID_Produit, Me. SerialHDD) mais il me renvoie l'erreur suivante:
http://www.cijoint.fr/cjlink.php?file=cj200912/cijF7p3UDF.jpg
J'ai besoin d'aide.
3 déc. 2009 à 00:22
http://www.codyx.org/snippet_numero-serie-physique-disque-dur-wmi_291.aspx
2 déc. 2009 à 17:35
2 déc. 2009 à 14:31
En effet avec le code de 3stone, le numéro renvoyé pour ma clé USB était différent avant et après le formatage. Et comme les 2 codes renvoient la même chose, cela signifie que ton code, contrairement à ce que tu as dit, n'affichera pas le même numéro de série à la suite d'un formatage.
Alors, ne serait-ce pas toujours le numéro de série de la partition qui change à chaque formatage comme tu l'as indiqué en intro?
2 déc. 2009 à 10:13
Parce que le chiffre négatif est la représentation décimale (Long, je suppose)
Il te suffit de le convertir en hexa pour retrouver l'autre : -727593647 --> FFFFFFFFD4A1CD51
1 déc. 2009 à 23:39
Une question cependant: Chez moi le "SerialHDD" renvoyé par ta fonction est D4A1-CD51. Est-ce que pour générer un serial je le saisi tel qu'il est, avec le trait d'union?
Par ailleurs j'ai aussi trouvé un code ici:
http://www.3stone.be/access/faq.php?lng=fr&pg=362
qui est sensé renvoyer lui aussi le numéro du disque dur, mais il renvoie un numéro différent (négatif), à savoir -727593647. Pourquoi deux numéros différents pour le même DD?
1 déc. 2009 à 23:13
1 déc. 2009 à 20:02
Une fois que tu reçois ces informations, tu peux générer un serial.
1 déc. 2009 à 12:09
Je voudrais tester ce code mais étant débutant, je ne sais pas comment le faire. J'ai bien créé un module dans lequel j'ai copié le code, j'ai pu obtenir le numéro de série du disque dur, j'ai pu générer des serials dans une zone de texte d'un formulaire, mais tout cela ne suffit pas.
Selon moi, puisque le serial généré tient compte du numéro de série du disque dur, on est donc tenu de le générer depuis le poste sur lequel est installée l'application à protéger.
Bref, aidez-moi à utiliser ce code, dans le détail.
29 avril 2008 à 02:13
Se baser sur le numéro de série, et:/ou, modèle de disque c'est tout bon et infalsifiable (même pour les costauds).
Je ne recommande pas l'utilisation des FSO en général... mais plûtot les API.
10 mars 2007 à 18:26
15 janv. 2007 à 12:11
car ton source ne fait que retourner le n°de volume du disque dur en hexadecimal (ce que tu peux obtenir en 2 lignes avec le filesystemobject)
Dim fso As New FileSystemObject
ret = Hex(fso.GetDrive("C:/").SerialNumber)
Ce numero est nouveau à chaque formatage contrairement au n° de série réel du HD
ou comme on te l'a également indiqué de l'adresse MAC (qui sert d'ailleurs de base à uuidcreatesequential).
14 janv. 2007 à 15:14
Amicalement,
Us.
12 janv. 2007 à 23:11
Sinon, y'a pas mal de commentaires (merci) et pas une note!!! Aller, un petit effort....
12 janv. 2007 à 22:41
Merci d'avoir pris la peine de répondre.
Malheureusement je ne sait ce que veux dire WMI.
Excusé l'ignorance.
Merci.
PS.: de toute façon le moment venu je ferais le test, parce-que je crois que ce code pourras me rendre service.
Merci encore
12 janv. 2007 à 21:56
12 janv. 2007 à 21:34
Sur le code en lui-même, la structure :
Caractere = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim a1 As Long, b1 As Long, c1 As Long, d1 As Long, e1 As Long
Dim a2 As Long, b2 As Long, c2 As Long, d2 As Long, e2 As Long
Dim a3 As Long, b3 As Long, c3 As Long, d3 As Long, e3 As Long
Dim a4 As Long, b4 As Long, c4 As Long, d4 As Long, e4 As Long
Dim a5 As Long, b5 As Long, c5 As Long, d5 As Long, e5 As Long
'et zioup, on chercher un serial compatible
BoucleGS3:
Iteration = Iteration + 1
a1 = Aleatoire(1, 36)
b1 = Aleatoire(1, 36)
c1 = Aleatoire(1, 36)
d1 = Aleatoire(1, 36)
e1 = Aleatoire(1, 36)
a2 = Aleatoire(1, 36)
b2 = Aleatoire(1, 36)
etc... Gagnerai à être mis dans un tableau indicé. Ce qui permettra de réduire notoirement le listing...
Amicalement,
Us.
12 janv. 2007 à 18:15
12 janv. 2007 à 00:31
Ce code, peut'il être appliqué en vb 2005.
Merci.
11 janv. 2007 à 17:20
11 janv. 2007 à 16:21
11 janv. 2007 à 13:49
@+
11 janv. 2007 à 13:43
http://www.codeguru.com/vb/gen/vb_system/network/article.php/c10887/
11 janv. 2007 à 13:36
11 janv. 2007 à 12:08
11 janv. 2007 à 08:41
11 janv. 2007 à 04:48
ca se change hyper-facilement via la BDD!
10 janv. 2007 à 23:39
Comme autre idée, tu peux utiliser l'adresse MAC de ta carte réseau ... à condition que le PC en soit équipé ...
Elle est normalement unique au monde.
Pour lire la tienne :
- Démarrer, Exécuter, "cmd" + enter
- Dans la console qui s'affiche, tape "getmac" + enter
Si vous n'avez pas de carte réseau, je serais curieux de savoir ce que GetMac répond.