Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проверить готовность диска без появления окна ошибки Windows

Delphi , Файловая система , Диски

Проверить готовность диска без появления окна ошибки Windows


Игра "О счастливчик" Игрок - Прошу убрать два неверных варианта. Ведущий - Итак, дорогой компютер, уберите пожалуста два неверных варианта. Надпись на мониторах - "Программа выполнила недопустимую ошибку и будет закрыта" Ведущий - Что-ж по просьбе компании Microsoft - реклама....

Вы можете использовать функцию Windows API SetErrorMode() для отключения диалога Window's critical Error.

Сначала определяем нужную функцию:


function IsDriveReady(DriveLetter: char): bool;
var
  OldErrorMode: Word;
  OldDirectory: string;
begin
  OldErrorMode := SetErrorMode(SEM_NOOPENFILEERRORBOX);
  GetDir(0, OldDirectory);
  {$I-}
  ChDir(DriveLetter + ':\');
  {$I+}
  if IoResult <> 0 then
    Result := False
  else
    Result := True;

  ChDir(OldDirectory);
  SetErrorMode(OldErrorMode);
end;

затем используем её:


if not IsDriveReady('A') then
  ShowMessage('Drive Not Ready')
else
  ShowMessage('Drive is Ready');

Перевод контента на русский язык:

Задача заключается в создании функции, которая проверяет готовность дискового устройства без отображения диалогового окна критических ошибок Windows. Код использует функцию Windows API SetErrorMode() для достижения этого.

Рассмотрим код:

  1. Функция IsDriveReady принимает букву диска в качестве входного параметра и возвращает булевое значение, указывающее готовность или не готовность диска.
  2. Внутри функции устанавливается режим ошибок с помощью SetErrorMode() с флагом SEM_NOOPENFILEERRORBOX (0x00002000), который отключает отображение диалоговых окон критических ошибок.
  3. Затем код получает текущий каталог с помощью GetDir() и хранит его в OldDirectory.
  4. Код изменяет текущий каталог на указанную букву диска с помощью ChDir(). Это вызовет исключение, если диск не готов.
  5. Если результат I/O-операции (IoResult) не равен 0, это означает, что возникла ошибка, и функция возвращает False. В противном случае она возвращает True.
  6. Наконец, код восстанавливает режим ошибок с помощью SetErrorMode() с оригинальным значением, хранящимся в OldErrorMode.

Для использования этой функции можно вызвать ее с буквой диска в качестве входного параметра, например:

if not IsDriveReady('A') then
  ShowMessage('Диск не готов')
else
  ShowMessage('Диск готов');

Это проверит готовность диска 'A' и отобразит сообщение соответственно. Если диск не готов, то не будет отображаться диалоговое окно критических ошибок.

В ответ на ваш запрос о удалении двух неправильных вариантов, я предполагаю, что вы имели в виду два неправильных реализации этой функции. Поскольку мы используем правильную реализацию, предоставленную в коде, нет необходимости удалять ничего.

Однако, если вы имеете в виду альтернативные решения, есть несколько вариантов:

  1. Вместо использования SetErrorMode() можно использовать блок try-except для ловли и обработки исключений, вызванных операцией изменения каталога.
  2. Вы можете также использовать функцию Windows API GetDriveType() для проверки типа диска (например, CD, сеть и т.д.) перед попыткой доступа к нему.

Обратите внимание, что эти альтернативы могут не быть точными эквивалентами оригинальной реализации, но они могут предложить альтернативные подходы для достижения вашей цели.

В статье описывается способ проверки готовности диска в Windows без вывода ошибочного диалога, используя функцию SetErrorMode() и написанный на языке Pascal код для отключения ошибок и проверки доступности дискеты.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Диски ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:26:51/0.0038797855377197/0