|
PRÉSENTATION :
Création/test/supression de lecteurs réseau avec Delphi
NOTES :
Le titre à tout dit...
Utilisation :
ConnecteLecteurReseau(Lecteur,Chemin,User,MotPasse:String);
Connecte le lecteur "Lecteur" au chemin réseau "Chemin" avec le compte "User"/"MotPasse". Cette procédure ne teste pas l'existance du lecteur demandé, il est préférable d'utiliser la procédure suivante.
ConnecteLecteurReseauTest(Lecteur,Chemin,User,MotPasse:String);
Connecte le lecteur "Lecteur" au chemin réseau "Chemin" avec le compte "User"/"MotPasse". Cette procédure teste l'existance du lecteur demandé, si celui-ci existe avec
le chemin demandé alors le lecteur existant est conservé.Si le lecteur existe avec un chemin différent de celui demandé, le lecteur précédent est supprimé et le lecteur demandé est créé.
Si un simple nom de User est donné, et si le PC demandeur est connecté à un domaine. Le contrôleur de domaine sera contacté pour autoriser ou non la connexion.
Vous pouvez alors forcer une connexion sur le compte local du PC distant en spécifiant le nom du PC dans le User : "NomPcDistant\NomUser"
CODE :
Unit ULecteurReseau;
Interface
Function ConnecteLecteurReseau (Lecteur,Chemin,User,MotPasse:String):Boolean;
Function ConnecteLecteurReseauTest (Lecteur,Chemin,User,MotPasse:String):Boolean;
Implementation
Uses Windows,SysUtils,Dialogs;
Procedure AffErreurLecteur(Retour:THandle);
Var ErrorBufAZT :Array[0..512]Of Char;
NameBufAZT :Array[0..512]Of Char;
Begin
If Retour<>NO_ERROR Then
Begin
Retour:=GetLastError;
Case Retour Of
ERROR_ACCESS_DENIED :ShowMessage('Erreur lecteur réseau:'#13'Accès réfusé');
ERROR_ALREADY_ASSIGNED :ShowMessage('Erreur lecteur réseau:'#13'Lecteur réseau déjà utilisé');
ERROR_BAD_DEV_TYPE :ShowMessage('Erreur lecteur réseau:'#13'Ressource réseau incompatible');
ERROR_BAD_DEVICE :ShowMessage('Erreur lecteur réseau:'#13'Lecteur réseau invalide');
ERROR_BAD_NET_NAME :ShowMessage('Erreur lecteur réseau:'#13'Chemin réseau incorrect');
ERROR_BAD_PROFILE :ShowMessage('Erreur lecteur réseau:'#13'Profile utilisateur incorrecte');
ERROR_BAD_PROVIDER :ShowMessage('Erreur lecteur réseau:'#13'Erreur provider');
ERROR_BUSY :ShowMessage('Erreur lecteur réseau:'#13'Provider occupé');
ERROR_CANCELLED :ShowMessage('Erreur lecteur réseau:'#13'Connection annulée');
ERROR_CANNOT_OPEN_PROFILE :ShowMessage('Erreur lecteur réseau:'#13'Profile utilisateur introuvable');
ERROR_DEVICE_ALREADY_REMEMBERED :ShowMessage('Erreur lecteur réseau:'#13'Lecteur déjà existant dans le profile utilisateur');
ERROR_EXTENDED_ERROR :Begin
Retour:=WNetGetLastError(Retour,ErrorBufAZT,512,NameBufAZT,512);
ShowMessage('Erreur étendue :'+IntToStr(Retour)+
#13+StrPas(ErrorBufAZT)+#13+StrPas(NameBufAZT));
End;
ERROR_INVALID_PASSWORD :ShowMessage('Erreur lecteur réseau:'#13'Mot de passe incorrect');
ERROR_NO_NET_OR_BAD_PATH :ShowMessage('Erreur lecteur réseau:'#13'Pas de réseau ou chemin réseau inconnu');
ERROR_NO_NETWORK :ShowMessage('Erreur lecteur réseau:'#13'Pas de réseau');
ERROR_NOT_CONNECTED :ShowMessage('Erreur lecteur réseau:'#13'Lecteur non connecté');
ERROR_MORE_DATA :ShowMessage('Erreur lecteur réseau:'#13'Pas assez de place pour les données');
ERROR_CONNECTION_UNAVAIL :ShowMessage('Erreur lecteur réseau:'#13'Connection permanente non disponible');
ERROR_DEVICE_IN_USE :ShowMessage('Erreur lecteur réseau:'#13'Lecteur réseau utilisée, déconnection impossible');
ERROR_OPEN_FILES :ShowMessage('Erreur lecteur réseau:'#13'Fichiers ouverts, déconnection impossible');
End;
End;
End;
Function ConnecteLecteurReseau(Lecteur,Chemin,User,MotPasse:String):Boolean;
Var NetResource :TNetResource;
LocalNameAZT :Array[0..79]Of Char;
RemoteNameAZT :Array[0..79]Of Char;
Retour :Integer;
Begin
// Remplissage des données
With NetResource Do
Begin
DwType := RESOURCETYPE_DISK;
LpLocalName := StrPCopy(LocalNameAZT ,Lecteur);
LpRemoteName := StrPCopy(RemoteNameAZT ,Chemin);
LpProvider := Nil;
End;
// Connection
Retour:=WNetAddConnection2(NetResource,PChar(MotPasse),PChar(User),CONNECT_UPDATE_PROFILE);
// Test de la réponse
Result:=Retour=NO_ERROR;
AffErreurLecteur(Retour);
End;
Function ConnecteLecteurReseauTest(Lecteur,Chemin,User,MotPasse:String):Boolean;
Var LocalNameAZT :Array[0..79]Of Char;
RemoteNameAZT :Array[0..80]Of Char;
Longueur :Cardinal;
Retour :Integer;
Begin
// Recherche du chemin existant si existant
Longueur:=80;
Retour:=WNetGetConnection(StrPCopy(LocalNameAZT,Lecteur),RemoteNameAZT,Longueur);
If Retour=NO_ERROR
Then Begin // Lecteur déjà défini
If UpperCase(StrPas(RemoteNameAZT))=UpperCase(Chemin)
Then Begin // Lecteur déjà existant
Result:=True;
End
Else Begin // Lecteur exitant mais chemin incorrect
Retour:=WNetCancelConnection2(StrPCopy(LocalNameAZT,Lecteur),CONNECT_UPDATE_PROFILE,False);
If Retour=NO_ERROR
Then Begin // Deconnection du précédent lecteur OK => Connection du nouveau
Result:=ConnecteLecteurReseau(Lecteur,Chemin,User,MotPasse);
End
Else Begin
AffErreurLecteur(Retour);
Result:=False;
End;
End;
End
Else Begin
If Retour=ERROR_NOT_CONNECTED
Then Begin // Lecteur non connecté => Connection du nouveau
Result:=ConnecteLecteurReseau(Lecteur,Chemin,User,MotPasse);
End
Else Begin
AffErreurLecteur(Retour);
Result:=False;
End;
End;
End;
end.
|
| |