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

C++ Discussion :

programme mot de passe


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut programme mot de passe
    Bonjour à tous ^^ .

    Alors je developpe un programme qui gère les mot de passe d'une entreprise et qui devra les changer automatiquement à une date voulu.
    Pour changer les mot de passe, j'utiliserai la fonction
    NetUserChangePassword()
    Qui demande 4 wchar_t en paramètre.
    Dans mon programme de test, j'ai fait en sorte que je devais taper le vieu mdp et le nouveau et cliquer sur un bouton pour effectuer le changement.
    Malheureusement, je n'arrive pas à effectuer la convertir d'une chaine ansistring en wchar_t

    Quelqu'un connait-il une fonction permettant cette conversion ? merci d'avance
    cordialement, bloowind.

  2. #2
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    Essaie MultiByteToWideChar.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut
    bizarre ta fonction, je ne voit pas trop la correspondance avec ansistring en wchar_t...

  4. #4
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    MultiByte est la chaine ANSI, et WideChar est la chaine Unicode (wchar).

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut
    oui mais cette fonction me demande pas loin de 5 ou 6 paramètres ...

  6. #6
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Par défaut
    Effectivement le prototype de la fonction est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int MultiByteToWideChar(
      UINT CodePage,         // code page
      DWORD dwFlags,         // character-type options
      LPCSTR lpMultiByteStr, // string to map
      int cbMultiByte,       // number of bytes in string
      LPWSTR lpWideCharStr,  // wide-character buffer
      int cchWideChar        // size of buffer
    );
    Mais certains paramètres peuvent être faciles à utiliser : pour CodePage je te conseille CP_ACP, ie la code page courante, et pour cbMultiByte -1 indique qu'il faut convertir toute la chaine.

    Il ne te reste donc plus qu'à allouer ton buffer résultat, ce qui donne un code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char *chaine_src = "Hello world !"; // par exemple
    wchar_t *bufferResu = new wchar_t[TAILLE_BUFFER];
    if(MultiByteToWideChar(CP_ACP, 0, chaine_src, -1, bufferResu, TAILLE_BUFFER) == 0)
       // traiter l'erreur
    else
       // la chaine a été convertie dans BufferResu

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut
    bon, ^^


    Voici mon code pour mon changement de mot de passe
    void __fastcall TTFPrinc2::btnChangeClick(TObject *Sender)
    {
    #define MAX_LENGTH 32
    #define MAX_MSG_BUF_SIZE 32768
    AnsiString codeErreur = "";
    AnsiString x = edtAncienmdp->Text;
    AnsiString y = edtNouveaumdp->Text;
    char* domain = "PC-STAG-03";
    char* login = "test";
    char* vieumdp = x.c_str();
    char* newmdp = y.c_str();
    char *argv[20];
    argv[1] = domain;
    argv[2] = login;
    argv[3] = vieumdp;
    argv[4] = newmdp;


    WCHAR domainname[DNLEN+1]; // buffer for the domain or workstation name
    WCHAR username[UNLEN+1]; // buffer for the user name
    WCHAR oldpassword[PWLEN+1]; // buffer for the old password
    WCHAR newpassword[PWLEN+1]; // buffer for the new password
    CHAR *msgBuf; // buffer for message text from system
    int msgOutPut; // buffer to capture the result of
    // FormatMessage for
    // future use

    // determine whether the number of parameters is correct
    // if not then display the proper syntax

    MultiByteToWideChar(
    CP_ACP, // code page
    0, // character-type options
    argv[1], // address of string to map
    strlen(argv[1])+1, // number of characters in string inc null!!
    (LPWSTR)&domainname, // address of wide-character buffer
    sizeof(domainname) // size of buffer
    );

    MultiByteToWideChar(
    CP_ACP, // code page
    0, // character-type options
    argv[2], // address of string to map
    strlen(argv[2])+1, // number of characters in string inc null!!
    (LPWSTR)&username, // address of wide-character buffer
    sizeof(username) // size of buffer
    );

    MultiByteToWideChar(
    CP_ACP, // code page
    0, // character-type options
    argv[3], // address of string to map
    strlen(argv[3])+1, // number of characters in string inc null!!
    (LPWSTR)&oldpassword, // address of wide-character buffer
    sizeof(oldpassword) // size of buffer
    );

    MultiByteToWideChar(
    CP_ACP, // code page
    0, // character-type options
    argv[4], // address of string to map
    strlen(argv[4])+1, // number of characters in string inc null!!
    (LPWSTR)&newpassword, // address of wide-character buffer
    sizeof(newpassword) // size of buffer
    );

    codeErreur = NetUserChangePassword(
    domainname, // pointer to server or domain name string
    username, // pointer to user name string
    oldpassword, // pointer to old password string
    newpassword // pointer to new password string
    );

    }
    hé il MARCHE YEAH !!!!
    rest plus qu'à gérer les erreurs avec des ShowMessage

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut
    et voilà, mon problème est résolu hu hu hu !
    Merci au forum

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/10/2013, 09h57
  2. Réponses: 2
    Dernier message: 10/02/2011, 21h19
  3. programme mot de passe
    Par ingyam dans le forum Débuter
    Réponses: 2
    Dernier message: 06/04/2009, 13h22
  4. Mot de passe sur programme Delphi
    Par michaellynx dans le forum Débuter
    Réponses: 7
    Dernier message: 26/11/2007, 17h57

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