Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отключение сетевыеx дисков [D6, Win2k, WinXP]


pepper ©   (2005-08-10 09:36:00) 

Уважаемые Мастера!
Программа забирает файлы через сетевые диски на другом комьютере, обрабатывает их и затем выкладывает на сетевой диск третьего компьютера.Проблема состоит в том, что изредко происходит отключение сетевых дисков, и сответственно происходит остановка процесса обработки. Скажите как программно можно отследить состояние сетевого диска, и самое главное, как активизировать этот сетевой диск, при попытке использовать функцию WNetAddConnection2 для неактивного сетевого диска, она возвращает значение, что сетевой диск уже существует.


pepper   (2005-08-10 15:23:00) [1]


> Rouse_ ©   (10.08.05 14:59) [8]
> Сначала вызови WNetCancelConnection2, а потом уж WNetAddConnection2

Как оказалось все гораздо проще и смешнее, чем я ожидал.....Rouse_ куда выслать отсканированные этикетки от пива?


Rouse_   (2005-08-10 14:59:00) [2]

Сначала вызови WNetCancelConnection2, а потом уж WNetAddConnection2


pepper   (2005-08-10 12:23:00) [3]


> Bekzhan   (10.08.05 10:57) [4]

Прошу прощения WNetAddConnection2.....


pepper   (2005-08-10 12:22:00) [4]


> Rouse_ ©   (10.08.05 09:59) [1]
> После прихода сообщения WM_DEVICECHANGE где WParam равен
> $8004, перебери диски в системе (GetLogicalDrives + GetDriveType),
> твои будут видны как DRIVE_REMOTE


Rouse, понял спасибо, а как можно восстановить подключение сетевого диска? WNetAddConnection2 не срабатывает или я не правильно делаю вызов...


pepper   (2005-08-10 12:20:00) [5]


> Bekzhan   (10.08.05 10:57) [4]
> Вызов диалога отключения сетевого диска

Меня интересуте как остледить что диск отключился, а подключение я делаю не через WNetConnectionDialog, а через WNetConnectionDialog2.


Bekzhan   (2005-08-10 10:57:00) [6]

Вызов диалога отключения сетевого диска

function DisconnectNetworkDrive(Wnd: HWND = 0): DWORD;
begin
 if Wnd = 0 then
   Wnd := FindWindow('Shell_TrayWnd', '');
 Result := WNetDisconnectDialog(Wnd, RESOURCETYPE_DISK);
end;

// Пример использования:
DisconnectNetworkDrive(Application.Handle);


Bekzhan   (2005-08-10 10:55:00) [7]

Подключить с.д
//Пример открытия стандартного диалога

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;


Bekzhan   (2005-08-10 10:52:00) [8]

Удалено модератором
Примечание: Offtopic


Rouse_   (2005-08-10 09:59:00) [9]

После прихода сообщения WM_DEVICECHANGE где WParam равен $8004, перебери диски в системе (GetLogicalDrives + GetDriveType), твои будут видны как DRIVE_REMOTE


Наверх

Титульная страница Поиск, карта сайта Написать письмо