![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отключение сетевые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