 |
|
 |
|
 |
20 - LECTEUR RESEAU
|
|
|
|
PRÉSENTATION :
Création/test/supression de lecteurs réseau avec Delphi
NOTES :
Le titre à tout dit...
Utilisation :
ConnecteLecteurReseau(Lecteur,Chemin,MotPasse:String);
Connecte le lecteur "Lecteur" au chemin réseau "Chemin" dont le mot de passe est "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,MotPasse:String);
Connecte le lecteur "Lecteur" au chemin réseau "Chemin" dont le mot de passe est "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éé.
CODE :
Unit ULecteurReseau;
Interface
Function ConnecteLecteurReseau (Lecteur,Chemin,MotPasse:String):Boolean;
Function ConnecteLecteurReseauTest (Lecteur,Chemin,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,MotPasse:String):Boolean;
Var NetResource :TNetResource;
LocalNameAZT :Array[0..79]Of Char;
RemoteNameAZT :Array[0..79]Of Char;
PassWordAZT :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,StrPCopy(PassWordAZT,MotPasse),Nil,CONNECT_UPDATE_PROFILE);
// Test de la réponse
Result:=Retour=NO_ERROR;
AffErreurLecteur(Retour);
End;
Function ConnecteLecteurReseauTest(Lecteur,Chemin,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,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,MotPasse);
End
Else Begin
AffErreurLecteur(Retour);
Result:=False;
End;
End;
End;
End.
|
| |
 |
|
 |
Les sources présentées sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©
2003 Bruno Guérangé. Aucune reproduction,
même partielle, ne peut être faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc sans l'autorisation expresse de l'auteur.
Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E
de dommages et intérêts.
Cette page est déposée à la
SACD.
|