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);
} |
Partager