2007. január 9., kedd

Connect/Disconnect network drives


Problem/Question/Abstract:

How do I map a drive letter to a network resource?

Answer:

//we could use the standard dialog to have the user do it

procedure TForm1.Button1Click(Sender: TObject);
begin
  WNetConnectionDialog(Handle, RESOURCETYPE_DISK)
end;

//we can use the same to connect a printer

procedure TForm1.Button1Click(Sender: TObject);
begin
  WNetConnectionDialog(Handle, RESOURCETYPE_PRINT)
end;

//or we can do this by code

procedure TForm1.Button2Click(Sender: TObject);
var
  NetResource: TNetResource;
begin
  { fill out TNetResource record structure }
  NetResource.dwType := RESOURCETYPE_DISK;
  NetResource.lpLocalName := 'S:';
  NetResource.lpRemoteName := '\\myserver\public';
  NetResource.lpProvider := '';

  { map our network drive using our TNetResource record structure }
  if (WNetAddConnection2(NetResource,
    '', {Password (if needed) or empty}
    '', {User name (if needed) or empty}
    CONNECT_UPDATE_PROFILE) <> NO_ERROR) then
    raise Excepcion.Create('unable to map drive')
      //there are other constants to check the error
    //ERROR_ACCESS_DENIED, ERROR_ALREADY_ASSIGNED, etc
end;

//to disconnect it simply...

procedure TForm1.Button2Click(Sender: TObject);
begin
  if WNetCancelConnection2('S:', 0, TRUE) <> NO_ERROR then
    raise Exception.create('Error disconnecting map drive');
  //of course there are also some other constants to check why the error
  //occurred: ERROR_DEVICE_IN_USE, ERROR_NOT_CONNECTED, etc
end;

Nincsenek megjegyzések:

Megjegyzés küldése