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

Windows Discussion :

CommandToArgvW coupe la chaine quand rencontre un espace


Sujet :

Windows

  1. #1
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut CommandToArgvW coupe la chaine quand rencontre un espace
    Bonjour,

    Comment se fait t il que, quand j'extrais le lpCmdLine avec CommandToArgvW(), les espaces ne sont pas pris ? Aurais je oublié quelque chose ?

    Par exemple : Si je lance le programme sans fichiers, il m'affiche (avec une MessageBox de test) :
    "C:/Documents" -> 1ere MessageBox
    "and" -> 2eme
    "Settings/Greg/test.exe" -> 3eme

    Serait ce un problème récalcitrant ?

    Merci d'avance.

    P.S. Je ne poste pas dans mon autre post puisque les sujets sont énormément différents...
    Vive l'embarqué.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben, c'est fait pour...

    Tu as essayé avec des guillemets dedans ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Médinoc
    Ben, c'est fait pour...

    Tu as essayé avec des guillemets dedans ?

    Des guillemets en double-cliquant ... pas facile !
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben je ne sais pas trop...
    Là, je dois dire que c'est un peu l'impasse, car je ne vois aucun moyen de faire la séparation entre d'un coté l'exécutable, de l'autre les arguments.

    Le conseil du jour : Tu n'es pas en MFC, je crois : Tu peux donc utiliser directement le 3e paramètre WinMain().
    (note : Tu ne devrais pas avoir de problème pour les arguments : Eux peuvent avoir des guillemets.)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    D'accord mais... comment puis je utiliser "directement" le lpCmdLine ? Il comporte plusieurs arguments non ? Ou est ce une multistring ? J'ai cherché sur msdn mais ils ne précisent pas sous quelle forme il "arrive".

    Le sauriez vous ?
    Vive l'embarqué.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    lpCmdLine c'est comme GetCommandLineA(), SAUF qu'il n'y a pas le nom de l'exécutable : Il n'y a que les arguments.

    Et pour les arguments, on SAIT comment mettre des guillemets sur un double-clic : ça se fait dans les associations de fichiers.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Avec "%L" par exemple je suppose...

    Mais, comment les parcourir dans ce cas là ?

    [EDIT] Non pas grave ... j'ai trouvé comment faire : Je croyais que GetCommandLineW() était la seule fonction à pouvoir récupérer les arguments, mais j'ai finalement vu sur msdn qu'une version ANSI existait : GetCommandLineA(). Donc, avec le code ci dessous, cela marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <windows.h>
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR lpszArgument,
                         int nFunsterStil)
    {
        MessageBox(NULL,GetCommandLineA(), "CmdLine :", MB_ICONINFORMATION);
    
        return 0;
    }
    Même avec des fichiers glissés sur l'exécutable. Il va juste falloir que je me code une fonction pour supprimer les guillemets présents dans la string à chaque argument...

    Merci à vous. [Topic RESOLU]

    [REEDIT] Tu l'avais dit... mais je n'ai pas fait attention à la lettre désolé. Merci encore

    [RE-RE EDIT] Non non, cela marche parfaitement ! Les guillemets sont inclus, et séparent les différents arguments. De plus, le nom de fichier est aussi présent en première place. [chemin]
    Vive l'embarqué.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ah, mince, je n'envisageais *encore* pas le fait que plusieurs fichiers soient représentés différemment...
    Pour un seul fichier c'est clair que ça marche, mais pour plusieurs... S'ils ne mettent pas les guillemets automatiquement, c'est l'impasse aussi...

    Pour tout te dire, j'ignore comment font les grands programmes lecteurs.


    Sinon, tu y vas à la bourrin: Tu testes un nom de fichier, puis si introuvable, tu testes en concaténant avec le suivant, puis les deux suivants, etc.
    Si tu n'as pas trouvé le fichier en arrivant au bout c'est qu'il est effectivement introuvable.

    Ça marchera parfaitement tant que tu n'auras pas dans un dossier de fichier sans extension du même nom que le premier mot d'un dossier fils.
    (bref, ça marchera tant que tu n'as pas de fichier sans extension appelé "Documents" and C:\ , etc.)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/07/2009, 15h51
  2. Réponses: 2
    Dernier message: 15/07/2009, 09h44
  3. Regex , non selection d'une chaine quand un certain mot présent
    Par Adjoint dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/07/2008, 22h05
  4. [VS2005] Mise en forme d'une chaine de caratere avec espace.
    Par GarsDuCalvados dans le forum VB.NET
    Réponses: 4
    Dernier message: 27/03/2008, 09h39

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