Netzlaufwerke ohne Dialog verbinden
Mithilfe der Funktion „WNetAddConnection2“ lassen sich Netzlaufwerke erstellen, ohne auf den Windows-eigenen Dialog zurückzugreifen.Die Funktion erwartet hier 5 Parameter. Dem Parameter ADrive muss der Laufwerksbuchstabe des zu erstellenden Laufwerks übergeben werden (nur der Buchstabe, ein Zeichen!). ADirectory enthält den Namen des Netzwerkverzeichnisses (beispielsweise \computernamelaufwerk (d)verzeichnis). Falls vorhanden können den nächsten beiden Parametern Benutzername und Kennwort zugeordnet werden. Soll das Netzlaufwerk nach dem nächsten Windows-Start wieder verbunden werden, übergeben Sie dem letzten Parameter den Wert „True“, ansonsten „False“.
function ConnectNetworkDrive(const ADrive: String; const ADirectory, AUsername, APassword: String; const ARestoreAtLogon: Boolean ): Boolean; var NetResource: TNetResource; dwFlags: DWORD; lPwd, lUser: PChar; begin NetResource.dwType:=RESOURCETYPE_DISK; NetResource.lpLocalName:=PChar(ADrive); NetResource.lpRemoteName:=PChar(ADirectory); NetResource.lpProvider:=nil; if ARestoreAtLogon then dwFlags:=CONNECT_UPDATE_PROFILE else dwFlags:=0; if AUsername'' then lUser:=PChar(AUsername) else lUser:=nil; if APassword'' then lPwd:=PChar(APassword) else lPwd:=nil; Result:=WNetAddConnection2(NetResource, lPwd, lUser, dwFlags)=NO_ERROR; end;
Aufgerufen werden kann die Funktion beispielsweise so:
procedure TForm1.Button1Click(Sender: TObject); begin if ConnectNetworkDrive('X:','\computer1laufwerk (d)alt', '', '', False) then Showmessage('Netzlaufwerk konnte erstellt werden') else RaiseLastOSError; end;
Die Aufschlüsselung der Rückgabeparameter finden Sie in der PSDK unter dem Stichwort „WNetAddConnection2“.Getrennt werden kann die Verbindung mithilfe der Funktion „WNetCancelConnection2“. Sie erwartet als ersten Parameter den entsprechenden Laufwerksbuchstaben. Steht der zweite Parameter auf CONNECT_UPDATE_PROFILE, wird das User-Profil ebenfalls aktualisiert. Sollte das Laufwerk also beim nächsten Windows-Start wieder verbunden werden, geschieht dies in Zukunft nicht mehr. Ansonsten kann dieser Parameter auf 0 stehen. Steht der dritte Parameter auf „True“ wird die Trennung erzwungen, sie findet also auch statt, falls gerade auf das Laufwerk zugegriffen wird.
procedure TForm1.Button1Click(Sender: TObject); begin if WNetCancelConnection2('x:',0, True)=NO_ERROR then Showmessage('Verbindung konnte getrennt werden.') else RaiseLastOSError; end;
Weitere Informationen zu dieser Funktion finden Sie in der PSDK unter dem Stichwort „WNetCancelConnection2“.RaiseLastOSError ist erst ab Delphi 6 verfügbar. Programmierer, die mit älteren Versionen arbeiten müssen an dieser Stelle RaiseLastWin32Error verwenden.