Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с Floppy диском 
:(
    Опции темы
Delist
Дата 25.6.2005, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.10.2004

Репутация: нет
Всего: нет



Может кто знает, как определить происходит ли сейчас запись данных на флопи или чтение с него.

Заранее благодарен.
PM MAIL WWW   Вверх
Poseidon
Дата 25.6.2005, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Попробуй пойти на хитрость.
Дело в том, что при чтении (записи) с (на) дискету доступ к ней запрещен. Т.е. если сейчас происходит чтение, то твоя программа получит отказ при обращении к дисководу. Этим и можно воспользоваться. Вот пример:
Код
// функция просто смотрит есть-ли дискета в дисководе.
// в общем-то не важно что она делает
// главное то, что она пытается обратится к дисководу
function IsDrive(Drive: char): boolean;
var
  SectorsPerCluster,
  BytesPerSector,
  NumberOfFreeClusters,
  TotalNumberOfClusters   : Cardinal;
begin
Result := GetDiskFreeSpace(PChar(Drive+':\'),
                            SectorsPerCluster,
                            BytesPerSector,
                            NumberOfFreeClusters,
                            TotalNumberOfClusters);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if IsDrive('A') then ShowMessage('Дисковод свободен') else showMessage('Дисковод занят')
end;



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
s-mike
Дата 25.6.2005, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: нет
Всего: 16



Poseidon, все конечно хорошо, но твоя процедурка будет иметь неадекватную реакцию при отсутствии диска в дисководе. Поэтому лучше так:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  F: TSearchRec;
  OldErrorMode: UINT;
begin
  OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
{$I-}
  if FindFirst('A:\*.*', faAnyFile, F) = ERROR_NOT_READY then
    ShowMessage('Drive is not ready!')
  else
    ShowMessage('Drive is OK!');
  FindClose(F);
{$I+}
  SetErrorMode(OldErrorMode);
end;

Хотя имхо лучше поставить хук на функции копирования.
PM MAIL WWW   Вверх
Delist
Дата 25.6.2005, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.10.2004

Репутация: нет
Всего: нет



Попрбывал оба примера, однако когда записываю данные на дискету, оба примера говорят, что дискета готовва к работе. Может у кого-нибудь ещё есть идей.


s-mike Не подскажешь какой тип ловушки надо использовать, что бы поставить хук на функции копирования? И к тому же при его помощи я смогу узнать только о том, что на дискету, что то копируют ли перемещает файл, или я чего-то недопонима? А если пользователь переписывает сушествует файл, или просто считывать данные с дискеты?
PM MAIL WWW   Вверх
Poseidon
Дата 25.6.2005, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(s @ 25.6.2005, 07:33)
Poseidon, все конечно хорошо, но твоя процедурка будет иметь неадекватную реакцию при отсутствии диска в дисководе
Действительно. Об этом я только к утру додумался smile

Цитата(Delist @ 25.6.2005, 14:59)
Попрбывал оба примера, однако когда записываю данные на дискету, оба примера говорят, что дискета готовва к работе
Но вот тут не знаю. Я пример s-mike не пробовал, но свой тестил. Все работает как нужно (конечно при условии что дискета в дисководе)


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0719 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.