Подключение сетевого диска

Материал из DRKB


Если возникла необходимость, чтобы Ваше приложение самостоятельно подключало сетевой ресурс, то это можно сделать двумя способами: вызвать стандартный диалог подключения ресурса либо использоваться следующий код.


// Пример открытия стандартного диалога
procedure TForm1.Button1Click(Sender: TObject);
begin
  WNetConnectionDialog(Handle, RESOURCETYPE_DISK);
end;

// Так же можно подключить и принтер
procedure TForm1.Button1Click(Sender: TObject);
begin
  WNetConnectionDialog(Handle, RESOURCETYPE_PRINT);
end;

// либо можно использовать следующий код
procedure TForm1.Button2Click(Sender: TObject);
var
  NetResource: TNetResource;
begin
  { заполняем структуру TNetResource }
  NetResource.dwType       := RESOURCETYPE_DISK;
  NetResource.lpLocalName  := 'S:';
  NetResource.lpRemoteName := '\\myserver\public';
  NetResource.lpProvider   := '';

  { подключаем сетевой ресурс, используя структуру TNetResource }
  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');
  // так же существуют другие константы для определения возникшей ошибки
  // ERROR_ACCESS_DENIED, ERROR_ALREADY_ASSIGNED, и т.д.
end;

// так же можно и отключить сетевой ресурс...
procedure TForm1.Button2Click(Sender: TObject);
begin
  if WNetCancelConnection2('S:', 0, TRUE) <> NO_ERROR then
    raise Exception.Create('Error disconnecting map drive');
  // соответственно можно использовать другие константы для определения ошибки
  // ERROR_DEVICE_IN_USE, ERROR_NOT_CONNECTED, и т.д.
end;


Author: Eber Irigoyen
Source: Взято из http://forum.sources.ru
ID: 03301



Подключение и отключение сетевых дисководов

Для работы с сетевыми дисководами (и ресурсами типа LPT порта) в WIN API 16 и WIN API 32 следующие функции:

1. Подключить сетевой ресурс[править | править код]

function WNetAddConnection(NetResourse, Password, LocalName: PChar): longint;
  • NetResourse - имя сетевого ресурса (например '\\P166\c')
  • Password - пароль на доступ к ресурсу (если нет пароля, то пустая строка)
  • LocalName - имя, под которым сетевой ресурс будет отображен на данном компьютере (например 'F:')


Пример подключения сетевого диска

WNetAddConnection('\\P166\C', '', 'F:');

Функция возвращает код ошибки. Для всех кодов предопределены константы, наиболее часто используемые :

  • NO_ERROR - Нет ошибок - успешное завершение
  • ERROR_ACCESS_DENIED - Ошибка доступа
  • ERROR_ALREADY_ASSIGNED - Уже подключен. Наиболее часто возникает при повторном вызове данной функции с теми-же параметрами.
  • ERROR_BAD_DEV_TYPE - Неверный тип устройства.
  • ERROR_BAD_DEVICE - Неверное устройство указано в LocalName
  • ERROR_BAD_NET_NAME - Неверный сетевой путь или сетевое имя
  • ERROR_EXTENDED_ERROR - Некоторая ошибка сети (см. функцию WNetGetLastError для подробностей)
  • ERROR_INVALID_PASSWORD - Неверный пароль
  • ERROR_NO_NETWORK - Нет сети


2. Отключить сетевой ресурс[править | править код]

function WNetCancelConnection(LocalName: PChar; ForceMode: Boolean): Longint;
  • LocalName - имя, под которым сетевой ресурс был подключен к данному компьютеру (например 'F:')
  • ForceMode - режим отключения:
    • False - корректное отключение. Если отключаемый ресурс еще используется, то отключения не произойдет (например, на сетевом диске открыт файл)
    • True - скоростное некорректное отключение. Если ресурс используется, отключение все равно произойдет и может привести к любым последствиям (от отсутствия ошибок до глухого повисания)

Функция возвращает код ошибки. Для всех кодов предопределены константы, наиболее часто используемые:

  • NO_ERROR - Нет ошибок - успешное завершение
  • ERROR_DEVICE_IN_USE - Ресурс используется
  • ERROR_EXTENDED_ERROR - Некоторая ошибка сети (см. функцию WNetGetLastError для подробностей)
  • ERROR_NOT_CONNECTED - Указанное ус-во не является сетевым
  • ERROR_OPEN_FILES - На отключаемом сетевом диске имеются открытые файлы и параметр ForceMode=false

Рекомендация: при отключении следует сначала попробовать отключить устройство с параметром ForceMode=false и при ошибке типа ERROR_OPEN_FILES выдать запрос с сообщением о том, что ус-во еще используется и предложением отключить принудительно, и при согласии пользователя повторить вызов с ForceMode=true


Источник: http://dmitry9.nm.ru/info/ ID: 03302