Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет stden ([info]stden)
@ 2007-02-19 11:41:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Работа с сетевыми дисками (подключение/отключение) из Delphi

unit NetworkU;
 
interface
 
// Узнать к какому сетевому пути подключен сетевой диск
function NetGetConnection( NetDrive:Char ):String;
// Удалить подключение к сетевому диску
// Аналогично: net use <NetDrive>: /del
function NetCancelConnection( NetDrive:Char ):String;
// Добавить подключение к сетевому диску
function NetAddConnection( NetDrive:Char; NetPath:String ):String;
 
implementation
 
uses Types, Windows;
 
function NetGetConnection( NetDrive:Char ):String;
var
  lpLocalName : PChar;
  lpRemoteName : PChar;
  Err : DWORD;
  MAX_SIZE : DWORD;
begin
  MAX_SIZE := 3000; // Размер буфера для сетевого пути - если не будет хватать - можно увеличить
  GetMem( lpRemoteName, MAX_SIZE );
  lpLocalName := PChar(String(NetDrive+':'));
  Err := WNetGetConnection( lpLocalName, lpRemoteName, MAX_SIZE );
  case Err of
    NO_ERROR: Result := lpRemoteName;
    ERROR_BAD_DEVICE: Result := 'Значение "'+lpLocalName+'" неверно!';
    ERROR_NOT_CONNECTED: Result := 'Устройство указанное в "'+lpLocalName+'" не переназначенное устройство.';
    ERROR_MORE_DATA: Result := 'Буфер слишком маленький.';
    ERROR_CONNECTION_UNAVAIL: Result := 'Устройство на данный момент не соединено, но это захваченная связь.';
    ERROR_EXTENDED_ERROR: Result := 'Произошла сетевая специфическая ошибка. Для того чтобы получить информацию об ошибке, вызовите функцию WNetGetLastError.';
    ERROR_NO_NET_OR_BAD_PATH: Result := 'Операция не выполнена потому что сетевой компонент не запущен или имя сетевого ресурса не может быть использовано.';
    ERROR_NO_NETWORK: Result := 'Сеть отсутствует.';
  end;
end;
 
function NetCancelConnection( NetDrive:Char ):String;
var
  lpLocalName : PChar;
  Err : DWORD;
begin
  lpLocalName := PChar(String(NetDrive+':'));
  Err := WNetCancelConnection( lpLocalName, true );
  case Err of
    NO_ERROR: Result := NetDrive+' успешно отключён!';
    ERROR_BAD_PROFILE: Result := 'Профиль пользователя неправильного формата.';
    ERROR_CANNOT_OPEN_PROFILE: Result := 'Система не может открыть профиль пользователя.';
    ERROR_DEVICE_IN_USE: Result := 'Устройство используется активным процессом и не может быть разъединено.';
    ERROR_EXTENDED_ERROR: Result := 'Произошла сетевая специфическая ошибка. Для того чтобы получить информацию об ошибке, вызовите функцию WNetGetLastError.';
    ERROR_NOT_CONNECTED: Result := 'Имя определенное параметром lpName - не переназначенное устройство или система к настоящему времени не подключена к устройству.';
    ERROR_OPEN_FILES: Result := 'Если есть открытые файлы и параметр fForce равен False.';
  end;
end;
 
function NetAddConnection( NetDrive:Char; NetPath:String ):String;
var
  Err : DWORD;
begin
  { подключаем сетевой pесуpс, используя структуру TNetResource }
  Err := WNetAddConnection(
    PChar(NetPath),
    '', // lpPassword, -- если нужен пароль для подключения - можно его сюда передать
    PChar(String(NetDrive+':')) //lpLocalName
    );
  case Err of
    NO_ERROR: Result := NetDrive+' успешно подключён!';
    ERROR_ACCESS_DENIED: Result := 'Нет доступа к сетевому ресурсу.';
    ERROR_ALREADY_ASSIGNED: Result := 'Устройство указанное в параметре lpLocalName уже переопределено.';
    ERROR_BAD_DEV_TYPE: Result := 'Тип устройства и тип ресурса не сочетается.';
    ERROR_BAD_DEVICE: Result := 'Значение определенное в параметре lpLocalName неверно.';
    ERROR_BAD_NET_NAME: Result := 'Значение определенное в параметре lpRemoteName неверно.';
    ERROR_BAD_PROFILE: Result := 'Профиль пользователя неправильного формата.';
    ERROR_CANNOT_OPEN_PROFILE: Result := 'Система не может открыть профиль пользователя.';
    ERROR_DEVICE_ALREADY_REMEMBERED: Result := 'Привязка для устройства указанного в параметре lpLocalName - уже в профиле пользователя.';
    ERROR_EXTENDED_ERROR: Result := 'Произошла сетевая специфическая ошибка. Для того чтобы получить информацию об ошибке, вызовите функцию WNetGetLastError.';
    ERROR_INVALID_PASSWORD: Result := 'Пароль недействителен.';
    ERROR_NO_NET_OR_BAD_PATH: Result := 'Операция не выполнена потому что сетевой компонент не запущен или имя сетевого ресурса не может быть использовано.';
    ERROR_NO_NETWORK: Result := 'Сеть отсутствует.';
  else
    Result := 'Неизвестная ошибка!';
  end;
end;
 
end.


(Добавить комментарий)


[info]hope1982.livejournal.com
2007-02-19 15:14 (ссылка)
Когда то нужда была в такой модульке... Но пришлось самому лабть...А что случилось??? Деннис тыж вроде как на асм и с++ ориентруешься в основном...Зачем потребовалась Дельфя?

(Ответить) (Ветвь дискуссии)


[info]stden
2007-02-19 22:16 (ссылка)
Я всегда любил Delphi, и, когда надо было написать маленькую утилитку - всегда ею пользовался ;)))

(Ответить) (Уровень выше)