Developpez.com - Delphi
X

Choisissez d'abord la catégorieensuite la rubrique :

Nono40.developpez.com
Le petit coin du web de Nono40
SOURCES TESTS DELPHI WIN32 AUTOMATISMES DELPHI .NET QUICK-REPORT
Retour à l'accueil
20 - LECTEUR RESEAU

PRÉSENTATION : Création/test/supression de lecteurs réseau avec Delphi
ZIP : Téléchargez le zip APERÇUS :

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.

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 œuvre intellectuelle protégée par les droits d'auteur. 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -