Para que salga el dialogo estandar de windows para conectar a una unidad de red, basta con esto:
Código Delphi
[-]
WNetConnectionDialog(Handle,RESOURCETYPE_DISK);
Si quieres añadir la unidad de red por código Silencioso (sin mostrar mensajes):
Código Delphi
[-]
procedure TForm1.btnConectaPorCodigoClick(Sender: TObject);
var
Err:Cardinal;
Msg:string;
NetResource: TNetResource;
begin
NetResource.dwType := RESOURCETYPE_DISK ;
NetResource.lpLocalName := pchar('Z:');
NetResource.lpRemoteName := PChar('\\winxp\imagenes');
NetResource.lpProvider := nil;
Err:= WNetAddConnection2(NetResource,
nil, nil, CONNECT_UPDATE_PROFILE);
if Err <> NO_ERROR then
begin
case Err of
ERROR_ACCESS_DENIED : Msg :='ERROR_ACCESS_DENIED :';
ERROR_ALREADY_ASSIGNED : Msg :='ERROR_ALREADY_ASSIGNED :';
ERROR_BAD_DEV_TYPE : Msg :='ERROR_BAD_DEV_TYPE :';
ERROR_BAD_DEVICE : Msg :='ERROR_BAD_DEVICE :';
ERROR_BAD_NET_NAME : Msg :='ERROR_BAD_NET_NAME :';
ERROR_BAD_PROFILE : Msg :='ERROR_BAD_PROFILE :';
ERROR_BAD_PROVIDER : Msg :='ERROR_BAD_PROVIDER :';
ERROR_BUSY : Msg :='ERROR_BUSY :';
ERROR_CANCELLED : Msg :='ERROR_CANCELLED :';
ERROR_CANNOT_OPEN_PROFILE : Msg :='ERROR_CANNOT_OPEN_PROFILE :';
ERROR_DEVICE_ALREADY_REMEMBERED : Msg :='ERROR_DEVICE_ALREADY_REMEMBERED :';
ERROR_EXTENDED_ERROR : Msg :='ERROR_EXTENDED_ERROR :';
ERROR_INVALID_PASSWORD : Msg :='ERROR_INVALID_PASSWORD :';
ERROR_NO_NET_OR_BAD_PATH : Msg :='ERROR_NO_NET_OR_BAD_PATH :';
ERROR_NO_NETWORK : Msg :='ERROR_NO_NETWORK :';
ERROR_NOT_CONNECTED : Msg :='ERROR_NOT_CONNECTED :';
end;
Raise Exception.create('Error al conectar la unidad '+ #10#13+Msg );
end;
end;
procedure TForm1.btnDesconectaClick(Sender: TObject);
begin
if WNetCancelConnection2( 'Z:',1,TRUE) <> NO_ERROR then
Raise Exception.create('Error al desconectar la unidad');
end;
Si deseas ver una lista de las unidades actuales:
Código Delphi
[-]
procedure TForm1.btnUnidadesRedClick(Sender: TObject);
function GetNetworkDriveMappings(SList:TStrings):Integer;
var
I:Char;
ThePath:String;
MaxNetPathLenWord;
begin
SList.Clear;
MaxNetPathLen:=MAX_PATH;
SetLength(ThePath,MAX_PATH);
for I := 'A' to 'Z' do
if WNetGetConnection(PChar(''+I+':'),PChar(ThePath),
MaxNetPathLen)<>ERROR_NOT_CONNECTED then
SList.Add(I+': '+ThePath);
Result := SList.Count;
end;
begin
listbox1.Items.Add('Unidades de Red Encontradas: '+inttostr( GetNetworkDriveMappings(Listbox1.items)));
end;
Espero que te sean de utilidad, si necesitas algo más, avisa.
Saludos