IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Obtention du numéro de serie d'une clé USB


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Fiscaliste
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Fiscaliste

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 0
    Points
    0
    Par défaut Obtention du numéro de serie d'une clé USB
    Bonjour Tout le monde
    D'habitude j'aime me débrouiller tout seul mais là je suis arrivé à un point où je plante vraiment et n'arrive pas à m'en sortir et ceux malgré des recherches poussées; ce qui fait que j'ai vraiment besoin de votre aide. Voilà j'expose mon problème :
    Le système d'exploitation de mon Pc est windows 7 64 bits. J'ai un projet que je développe sous Windev 7, et j'aimerais pouvoir lire et récupérer le n° de série du fabricant d'une clé USB connectée à mon Pc. Pour ce faire j'ai intégrer la classe WDDOS à mon projet, j'ai ensuite crée une fenêtre avec un champs de saisie censé recevoir et faire apparaître le numéro de série de la clé USB et un bouton dans lequel j'ai mis le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaCommandeDos est un WDDos
    MaCommandeDos.CommandLine_Let("cmd/r""wmic diskdrive where deviceid = '\\\\.\\PHYSICALDRIVE1' get serialnumber""")
    MaCommandeDos.ExecuteCommand()
    NumSerieClé = Gauche(ExtraitChaîne(MaCommandeDos.OutPuts(),2),4)
    NumSerieClé est le nom du champ de saisie censé recevoir le n° de serie de la Clé.
    Le problème est que quant j'exécute et que j'appuie sur le bouton contenant le code ci-dessus, j'ai un message du genre :"Fichier ou commande non trouvé"
    Plus quant je saisie dans l'invite de commande (Cmd) :wmic diskdrive where deviceid = '\\\\.\\PHYSICALDRIVE1' get serialnumber, Il me dit que : verbe de l'alias non connu.
    Je ne sais pas où est l'erreur que j'ai commise, j'ai tout tenté mais en vain et là je baisse vraiment les bras. S'il vous plaît au secours votre aide me sera précieuse et d'une grande utilité.

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Ta question concerne WMIC, et pas Windev directement. Il faut essayer de résoudre le problème en ligne de commande, et ensuite, tu pourras copier la commande obtenue dans l'environnement Windev.

    Voici un tutoriel sur WMIC : https://briot-jerome.developpez.com/...dinateur-wmic/
    Et je pense que tu auras des réponses en postant des questions dans le forum correspondant : https://www.developpez.net/forums/f5...emes/hardware/

    Sinon, l'autre solution que j'aurais vu pour ton problème , c'est en passant par la commmande API :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    API("kernel32", "GetVolumeInformationA" , &lpRootPathName, &lpVolumeNameBuffer, nVolumeNameSize, &lpVolumeSerialNumber, &lpMaximumComponentLength, &lpFileSystemFlags, &lpFileSystemNameBuffer, nFileSystemNameSize)
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour, d'après ce que j'ai pu trouver sur le net, la ligne de commande est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wmic diskdrive get PNPDeviceID

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Fiscaliste
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Fiscaliste

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Ta question concerne WMIC, et pas Windev directement. Il faut essayer de résoudre le problème en ligne de commande, et ensuite, tu pourras copier la commande obtenue dans l'environnement Windev.

    Voici un tutoriel sur WMIC : https://briot-jerome.developpez.com/...dinateur-wmic/
    Et je pense que tu auras des réponses en postant des questions dans le forum correspondant : https://www.developpez.net/forums/f5...emes/hardware/

    Sinon, l'autre solution que j'aurais vu pour ton problème , c'est en passant par la commmande API :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    API("kernel32", "GetVolumeInformationA" , &lpRootPathName, &lpVolumeNameBuffer, nVolumeNameSize, &lpVolumeSerialNumber, &lpMaximumComponentLength, &lpFileSystemFlags, &lpFileSystemNameBuffer, nFileSystemNameSize)
    Merci tb je voudrais savoir ou placer cette ligne dans mon code ci-dessus afin de pouvoir obtenir le numéro de série. Veuillez noter que je n'ai jamais utiliser cette commande. En tout cas mille merci pour ta réponse. Je ne voudrais pas abuser de votre temps, ça serait gentil de votre part de me donner plus de détails.

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    La commandeAPI("kernel32" , ...) viendrait remplacer tout ton code.

    Mais je n'ai aucune certitude que ça marche. Il faut regarder la documentation sur l'API Kernel32, chercher les différents paramètres. Utiliser les API est toujours galère pour les non-initiés (comme moi).

    Si tu choisis la voie API, essaie directement via Windev. Si tu choisis la voie WMIC, essaie déjà en mode commande-DOS, sans passer par Windev. Et quand tu auras trouvé la bonne syntaxe, implémenter cela dans Windev devrait être simple.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Fiscaliste
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Fiscaliste

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par romulus001 Voir le message
    Bonjour, d'après ce que j'ai pu trouver sur le net, la ligne de commande est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wmic diskdrive get PNPDeviceID
    Merci Romulus pour votre réponse. J'ai essayer la ligne en invite de commande et ça marche. Par contre quant je la place dans mon code ci-dessous suivant et qui est placé dans un bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaCommandeDos est un WDDos
    MaCommandeDos=("cmd\""wmic diskdrive Get PNPDeviceID")
    MaCommandeDos.ExecuteCommand()
    NumSerieClé = MaCommandeDos
    J'ai le message d'erreur suivant : "On ne peut pas affecter à un objet autre chose qu'un objet de la même classe."
    Veuillez noter que je suis pas un grand connaisseur. En tout cas mille mercis pour votre réponse. Ca serait gentil de votre part de m'aider davantage si ce n'est pas trop vous demander.

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Ici, on est sur un problème de syntaxe Windev, ou plutôt sur une erreur d'étourderie.
    Dans ton tout 1er message, tu procédais de la bonne façon.

    Combinons la bonne syntaxe de Windev, et la bonne syntaxe de WMIC :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaCommandeDos est un WDDos
    MaCommandeDos.CommandLine_Let("cmd\""wmic diskdrive Get PNPDeviceID")
    MaCommandeDos.ExecuteCommand()
    NumSerieClé = MaCommandeDos
    PS1 : Dans ton message, pour que les lignes de codes apparaissent lisibles, il faut utiliser la balise # de la barre d'outils. (j'ai édité ton message pour ça)
    PS2 : Si on a 2 clés USB connectées au PC, comment on fait pour identifier la bonne ligne dans le résultat ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Fiscaliste
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Fiscaliste

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 0
    Points
    0
    Par défaut
    Bonsoir je continue toujours de creuser toujours pas de solutions. Merci en tout cas pour tes réponses et surtout ta disponibilité.

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 949
    Points : 9 277
    Points
    9 277
    Par défaut
    hello,
    1 - il y a une classe plus récente que WDDOS qui fait la même chose et même plus, c'est cconsole (voir ici) :
    Cette classe est basée sur la classe WD7DOS (disponible chez sourceforge.net ici) créée par drcharly93 et romu, reprise par Nicolas Compain ici (32 bits 64 bits). Elle permet d'exécuter des commandes win32 console (et non pas DOS comme on a toujours tendance à le dire) sans qu'une fenêtre s'ouvre pour l'utilisateur et avec possibilité d'exploiter le texte renvoyé par la commande. Pour qu'un maximim de personnes puisse l'utiliser, j'ai écrit cette classe sous windev 9. Par rapport à la classe WD7DOS elle apporte les modifications suivantes :
    Définition de procédures de réception et de fin de commande -> ProcReception ProcFinCmd
    Gestion de la conversion de texte OEM vers ANSI (pour les problèmes d'accents en particulier) -> SortieAnsi
    Une procédure de lecture de l'état de la commande -> LireEtat
    // version 1.0 Jurassic.Pork - 9 juillet 2012
    la version est compatible 32 bits 64 bits.
    les noms des méthodes ont changé (plus courtes).
    Modification de la méthode ExécuterCmdAsync utilisation d'un ExécuterCmd lancé dans un threadExécute.
    Ajout du numéro de version en constante (cConsole::Version).
    Correction de la méthode d'arrêt.
    Les procédures ExécuterCmdAsync et ExécuterCmd renvoient maintenant le code Retour de la commande ou un code d'erreur interne.
    Amélioration des performances de lecture du pipe en utilisant un buffer de 4096 octets (au lieu de 256).
    La version minimum d'utilisation est windev 12.
    / ===================================================
    // Version 1.1 Août 2015
    // Suite à remarque de Michel Souris
    // Correction du test du retour des CreateProcessA (Méthodes ExécuterCmd)
    la dernière version de cette classe (1.1) est disponible ici

    2 - Dans Windev, on peut très bien récupérer des infos WMI sans passer par un programme externe comme wmic

    voici un exemple de code , qui va lister tous les périphériques amovibles connectés à l'ordinateur ( en particulier les clés USB) et qui va afficher les informations suivantes :
    • Le modèle du périphérique
    • La taille
    • Le numéro de série
    • La signature


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    objLocator est un objet Automation "WbemScripting.SWbemLocator"
    objService est un objet Automation dynamique
    Results est un objet Automation dynamique
    QUAND EXCEPTION DANS
        objService = objLocator>>ConnectServer(".", "root\cimv2")
        objService>>Security_>>ImpersonationLevel = 3 
        // Infos périphériques amovibles
        Results = objService>>ExecQuery("SELECT Model, Size, SerialNumber, Signature " +
                                       "FROM Win32_DiskDrive Where MediaType = 'Removable Media' ")                                   
        POUR x = 0 _A_ Results>>Count -1
            Trace("Modèle : ", Results>>ItemIndex(x)>>Properties_("Model")>>Value ) 
            Trace("Taille : ", TailleVersChaîne( Results>>ItemIndex(x)>>Properties_("Size")>>Value,
                  tailleGo)) 
            Trace("SerialNumber : ", Results>>ItemIndex(x)>>Properties_("SerialNumber")>>Value ) 
            Trace("Signature : ", Results>>ItemIndex(x)>>Properties_("Signature")>>Value )  
            Trace("=========================")
        FIN
    FAIRE
        Erreur("Erreur execution WMI",ExceptionInfo(errInfo))
        ExceptionActive()
    FIN
    Et voici le résultat sur mon ordinateur où j'ai connecté deux clés USB, une de 1Go et une de 16 Go :

    Nom : Windev-Lister-ClésUSB.png
Affichages : 4369
Taille : 8,9 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Fiscaliste
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Fiscaliste

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 0
    Points
    0
    Par défaut
    Mille merci à toi J.P. Tu viens tu viens de me sauver la vie. J'ai essayer tout ce que tu m'a dit et ça marche à merveille. Je ne saurais te remercier. Seulement je n'arrive pas à récupérer le numéro de série de la clé USB connectée et de l'afficher dans un champ de saisie dédié à celà dans une fenêtre. Prière de m'aider à le faire.
    Amicalement Jmeily

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 174
    Points : 287
    Points
    287

Discussions similaires

  1. numéro de série d'une clé USB
    Par dr_feelgood dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/09/2009, 17h21
  2. Réponses: 3
    Dernier message: 01/02/2008, 15h07
  3. Réponses: 3
    Dernier message: 31/08/2007, 18h31
  4. Réponses: 5
    Dernier message: 03/07/2007, 21h35
  5. [JSP] Affichage numéro de ligne d'une exception
    Par PhoneKilleR dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 23/09/2003, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo