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++Builder Discussion :

mapper lecteur réseau + WNet


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut mapper lecteur réseau + WNet
    Bonjour,

    je veux mapper un lecteur de réseau directement via mon appli. J'ai trouvé ce lien intéressant : http://www.swissdelphicenter.ch/torry/showcode.php?id=745
    mais il faut que je le retranscrive en C++ et je ne vois pas ce qui peut être équivalent à TNetResource. Sinon j'ai lu quelques trucs sur WNet mais je n'ai aucune idée sur comment l'installer, l'utiliser...
    Si quelqu'un connait un article ou une piste pour m'orienter ça serait sympa.

    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    pour TNetResource :

    j'ai trouvé ça http://bdn.borland.com/article/0,1410,28418,00.html
    TNetResource=packed record
    dwScope: DWORD;
    dwType: DWORD;
    dwDisplayType: DWORD;
    dwUsage: DWORD;
    lpLocalName: PAnsiChar;
    lpRemoteName: PAnsiChar;
    lpComment: PAnsiChar;
    lpProvider: PAnsiChar;
    end;
    qui décrit la composition de l'enregistrement TNetResource;

    peut être qu'en C++ ça pourrait ressembler à ça :
    (je ne suis pas très fort en delphi) packed record ->c'est quoi la différence avec record ? ( peut etre une directive de compression ? )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct TNetResouce{
     DWORD dwScope;
     DWORD dwType;
     DWORD dwDisplayType;
     DWORD dwUsage; 
     unsigned char * lpLocalName;	
     unsigned char * lpRemoteName;
     unsigned char * lpComment;
     unsigned char * lpProvider;
    };

  3. #3
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    Après approfondissement, je pense qu'il me manque juste l'équivalent de la fonction : WNetAddConnection en C++.

    Quelqu'un connaitrait-il l'équivalent ?

    Merci d'avance

  4. #4
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    bah je crois que c'est une API Windows

    d'après msdn,
    il faut inclure "Winnetwk.h."
    et ajouter la librarie: Mpr.lib située C:\ ...\CBuilder6\lib\psdk\

    le lien :
    http://msdn.microsoft.com/library/de...connection.asp

    tiens nous au courant si ça fonctionne...
    @+
    Djob.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    oki,

    donc dire que je galère est un faible mot !!!!
    Je dois faire mon boulet de service car je comprends plus rien. Comme excuse je dirai que c'est la première fois que j'utilise une fonction d'une API Windows mais bon j'ai un peu honte quand même

    Tout d'abord pour monter mon lecteur réseau j'ai utilisé la fonction WNetAddConnection2 et j'ai codé tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct _NETRESOURCEA *NR;
    NR->lpLocalName = "P:/";
    NR->lpRemoteName = "//192.168.1.2/photos/";
    WNetAddConnection2(NR,"motdepasse","login",CONNECT_PROMPT);
    Comme mon lecteur n'était pas monté je me suis dit que j'allais récupérer les codes erreurs, j'ai donc ajouté la librairie "WinError.h" et j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DWORD coderror;
    coderror = WNetAddConnection2(NR,"motdepasse","login",CONNECT_PROMPT);
    if(coderror == ERROR_ACCESS_DENIED)
    	ShowMessage("ERROR_ACCESS_DENIED");
    else
    	ShowMessage("comprend po !!!");
    Et là mon appli plante !!
    Je suis sur qu'il me manque les base mais un petit coup de pouce m'aiderait énormément.

    Merci d'avance.

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Hello

    Je te propose d'essayer ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    NETRESOURCE NR; 
    NR.lpLocalName = "P:"; 
    NR.lpRemoteName = "//192.168.1.2/photos/"; 
    DWORD coderror; 
    coderror = WNetAddConnection2(&NR,"motdepasse","login",CONNECT_PROMPT); 
    if(coderror == ERROR_ACCESS_DENIED) 
       ShowMessage("ERROR_ACCESS_DENIED"); 
    else 
       ShowMessage("comprend po !!!");
    Dans ton exemple, tu utilises un pointeur sur un _NETRESOURCEA, mais sans faire de new dessus :-(

    A++

  7. #7
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    merci pour cette remarque judicieuse qui m'a fait avancer.
    Grâce à cela je sais que mon lecteur ne se mappe pas à cause de l'erreur 87 : ERROR_INVALID_PARAMETER.
    Je ne vois pas pourquoi mais je persévère !!!

    Merci de ton aide

  8. #8
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Pour avancer, regarde dans les autres champs de la structure NETRESOURCE, il y a peut-être autre chose à renseigner...

    Pour le "//192.168.1.2/photos/", ce ne serait pas plutôt "\\192.168.1.2\photos" ?? Donc dans le code : "\\\\192.168.1.2\\photos" ??

    Sinon, est-ce que tu as un message d'erreur quand tu essaies de mapper ta ressource directement depuis l'explorateur de Windows ??

    Voilà

    A++

  9. #9
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    merci pour ton aide.
    Je pense déjà qu'il faut que j'utilise "\\192.168.1.2\photos" mais comme ça marche toujours pas je vais regarder du coté des autres champs de ma ressource.
    Sinon j'arrive à mapper correctement donc mon souci vient vraiment de ma fonction.

    En tout cas merci pour ton aide car je me sens moins seul dans mon souci

    ++

  10. #10
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    Voilà ,
    par hasard tout à l'heure j'ai eu besoin aussi de mapper un lecteur réseau...(pour une connexion access odbc)
    donc j'avais déjà des pistes ;-) et j'ai trouvé cette tips de nono40 ( en Delphi ):

    http://nono40.developpez.com/sources/source0020/

    J'ai un peu lutté (une 20taine d'essais) pour la faire marcher car j'avais un probleme:
    premièrement avec une règle de mon firewall et
    deuxiemement j'avais pas mis le mot de passe de mon utilisateur...
    (j'avais fais un partage avec comptes identiques sur les machines et acces restreint à cet utilisateur ...)
    mais finalement ça marche ...

    avec ip ou nom de machine...

    en cadeau la transcription en C++ builder : ( même si je pense que ton code est bon , peut être que ça pourra t'aider à trouver le code d'erreur ou ce qui va pas dans la configuration reseau ...)


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    //---------------------------------------------------------------------------
    //Merci à nono40 pour la tips : je me permets de la retranscrire en C++
    // pour les utilisateurs de BCB:
     
    //fonction d'affichage des erreurs
    void AffErreurLecteur(DWORD Retour)
    {
       char ErrorBufAZT[512];
       char NameBufAZT[512];
       String Msg;
       if(Retour!=NO_ERROR)
       {
          switch((int)Retour){
            case ERROR_ACCESS_DENIED:
                 MessageBox(NULL,"Accès réfusé","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_ALREADY_ASSIGNED:
                 MessageBox(NULL,"Lecteur réseau déjà utilisé","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_BAD_DEV_TYPE:
                 MessageBox(NULL,"Ressource réseau incompatible","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_BAD_DEVICE:
                 MessageBox(NULL,"Lecteur réseau invalide","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_BAD_NET_NAME:
                 MessageBox(NULL,"Chemin réseau incorrect","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_BAD_PROFILE:
                 MessageBox(NULL,"Profile utilisateur incorrect","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_BAD_PROVIDER:
                 MessageBox(NULL,"Erreur provider","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_BUSY:
                 MessageBox(NULL,"Provider occupé","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_CANCELLED:
                 MessageBox(NULL,"Connection annulée","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_CANNOT_OPEN_PROFILE:
                 MessageBox(NULL,"Profile utilisateur introuvable","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_DEVICE_ALREADY_REMEMBERED:
                 MessageBox(NULL,"Lecteur déjà existant dans le profile utilisateur","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_EXTENDED_ERROR:
                 Retour=WNetGetLastError((unsigned long *)Retour,ErrorBufAZT,512,NameBufAZT,512);
                 Msg  = "Erreur étendue :" +IntToStr(Retour)+"\n"+StrPas(ErrorBufAZT)+"\n"+StrPas(NameBufAZT);
                 MessageBox(NULL,Msg.c_str(),"Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_INVALID_PASSWORD:
                 MessageBox(NULL,"Mot de passe incorrect","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_NO_NET_OR_BAD_PATH:
                 MessageBox(NULL,"Pas de réseau ou chemin réseau inconnu","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_NO_NETWORK:
                 MessageBox(NULL,"Pas de réseau détecté","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_NOT_CONNECTED:
                 MessageBox(NULL,"Lecteur non connecté","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_MORE_DATA:
                 MessageBox(NULL,"Pas assez de place pour les données","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_CONNECTION_UNAVAIL:
                 MessageBox(NULL,"Connection permanente non disponible","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_DEVICE_IN_USE:
                 MessageBox(NULL,"Lecteur réseau utilisée, déconnection impossible","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case ERROR_OPEN_FILES:
                 MessageBox(NULL,"Fichiers ouverts, déconnection impossible","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            case 1326:
                 MessageBox(NULL,"Erreur Logon : Authentification utilisateur incorrecte","Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
            break;
     
            //case 1314 : peut etre probleme de permission
            //case 87 :   invalid parameter
     
            default:
                 Msg =  "Erreur non repertoriée : code :"+ IntToStr(Retour);
                 MessageBox(NULL,Msg.c_str(),"Erreur lecteur réseau",MB_OK|MB_SYSTEMMODAL);
          }
       }
    }
    //-------------------------------------------------------------------------------
    //fonction connection lecteur reseau:
    bool __fastcall ConnecteLecteurReseau(String Lecteur,String Chemin,String MotPasse)
    {
        NETRESOURCE NetResource;
        char LocalNameAZT[80];
        char RemoteNameAZT[80];
        char PassWordAZT[80];
        DWORD Retour;
     
        NetResource.dwType = RESOURCETYPE_DISK;
        NetResource.lpLocalName  = StrPCopy(LocalNameAZT  ,Lecteur);
        NetResource.lpRemoteName =StrPCopy(RemoteNameAZT ,Chemin);
        NetResource.lpProvider = NULL;
     
        // Connection
        Retour=WNetAddConnection2(&NetResource,StrPCopy(PassWordAZT,MotPasse),NULL,CONNECT_UPDATE_PROFILE);
     
        // Test de la réponse
        AffErreurLecteur(Retour);
     
     
        return (Retour==NO_ERROR);
     
    }
     
    //-------------------------------------------------------------------------------
    //fonction à utiliser :
     
    bool __fastcall  ConnecteLecteurReseauTest(String Lecteur,String Chemin,String MotPasse)
    {
         char LocalNameAZT[80];
         char RemoteNameAZT[80];
         DWORD  Longueur=80;
         int Retour = WNetGetConnection(StrPCopy(LocalNameAZT,Lecteur),RemoteNameAZT,&Longueur);
         if(Retour==NO_ERROR)
         {
            if( StrPas(RemoteNameAZT).LowerCase()== Chemin.LowerCase())
            {
                return true;
            }else{
                Retour = WNetCancelConnection2(StrPCopy(LocalNameAZT,Lecteur),CONNECT_UPDATE_PROFILE,False);
                if(Retour==NO_ERROR){
                  return ConnecteLecteurReseau(Lecteur,Chemin,MotPasse);
                }else{
                  AffErreurLecteur(Retour);
     
                  return false;
                }
            }
         }else{
            if(Retour==ERROR_NOT_CONNECTED){
              return ConnecteLecteurReseau(Lecteur,Chemin,MotPasse);
            }else{
              AffErreurLecteur(Retour);
     
            }
         }
    }
    //-------------------------------------------------------------------------------
    //ajout : pour deconnecter:
    void  __fastcall AnnulerConnection(String Lecteur,bool force){
       DWORD Retour =  WNetCancelConnection2(Lecteur.c_str(),CONNECT_UPDATE_PROFILE,force);
        AffErreurLecteur(Retour);
    }
    //-------------------------------------------------------------------------------
    //usage : bouton connecter
    void __fastcall TForm1::BTN_MAPDRIVEClick(TObject *Sender)
    {
     
            String Lecteur = EDT_LECTEUR->Text;  // "M:"
            String Chemin = EDT_CHEMIN->Text;   // nom de machine ou ip locale
            String MotDePasse  = EDT_PASSWD->Text;
            ConnecteLecteurReseauTest(Lecteur,Chemin,MotDePasse);
     
    }
    //---------------------------------------------------------------------------
    //bouton deconnecter:
    void __fastcall TForm1::BTN_DECONNECTClick(TObject *Sender)
    {
           AnnulerConnection(EDT_LECTEUR->Text,true);
     
    }

  11. #11
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    un grand merci
    Grace à ta fonction je viens de comprends et je suis d'autant plus furieux contre moi que totoche76 m'avait presque donné la soluce
    En effet c'est ma structure NETRESSOURCE qui merdait car je n'avais pas tout renseigné.
    Honte sur moi

    Bref en conclusion, j'ai repris tes fonctions et j'y ai ajouté uen variable en paramètre afin de pouvoir aussi se connecter au lecteur réseau en changeant le login.

    En tout cas encore merci

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

Discussions similaires

  1. mapper un lecteur réseau
    Par mcmahon dans le forum VBScript
    Réponses: 7
    Dernier message: 05/04/2017, 21h49
  2. [HTML] Mapper un lecteur réseau avec un lien dans un fichier en html
    Par jupiter1111 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 12/01/2009, 11h16
  3. Mapper un lecteur réseau en Java
    Par mugwump dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 17/08/2007, 14h12
  4. Mapper un lecteur réseau
    Par sense dans le forum ASP
    Réponses: 3
    Dernier message: 27/03/2007, 16h31
  5. [C#]Mapper un lecteur réseau
    Par bilb0t dans le forum C#
    Réponses: 3
    Dernier message: 04/11/2005, 09h26

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