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

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

Как узнать о недоступности диска, с которого запущена программа?


lmatveev ©   (2004-02-26 20:07:00) 

Мне надо каким-то образом узнать, что диск, с которого запустилась моя программа, был вынут или отключен. Это нужно в случаях, когда программу запускают с CD, съемного диска, сети и т.п. чтобы аккуратно завершить работу


Cobalt   (2004-02-27 11:44:00) [1]

Есть сообщение WM_DEVICECHANGE
Только зачем?
С дискеткой у тебя не прокатит.  А с Сидиромом система сама кэширует всякие там ДЛЛ-ки.
Проверяй в тех местах, где ты обращаешься к файлам.
И, пожалуйста, не путай ОС и Проводник.


lmatveev   (2004-02-26 21:57:00) [2]

Спасибо. Но я имел ввиду нельзя ли перехватывать какое-нибудь сообщение о том, что диск отключился? ОС это как-то делает для CD и сетевых дисков. Может что-то подобное монитору каталогов...


DDA   (2004-02-26 20:50:00) [3]

например так:
procedure TForm1.Button1Click(Sender: TObject);
function IsDiskInDrive(Drive: string): Boolean;
var
 ErrMode: Cardinal;
 VolName: array[0..255] of Char;
 FS: array[0..255] of Char;
 MaxComSize: Cardinal;
 Flags: Cardinal;
begin
 ErrMode := SetErrorMode(SEM_FAILCRITICALERRORS);
 try
   Result := GetVolumeInformation(PChar(Drive), VolName, SizeOf(VolName), nil,
     MaxComSize, Flags, FS, SizeOf(FS));
 finally
   SetErrorMode(ErrMode);
 end;
end;
begin
   if not IsDiskInDrive(Edit1.Text) then ShowMessage('А диска-то нет :(')
   else ShowMessage('есть');
end;


Edit1.Text:='C:\';


Наверх

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