Глубокая ночь. Сидит юзер за компом. Вдруг на мониторе белым по черному высвечивается: "Если нажмешь 10 клавиш одновременно, покажу голую бабу". Ну юзер не долго думая продавливает 10 клавиш обоими руками. Тут на мониторе появляется: "Молодец! А если, скатина, отпустишь хоть одну клавишу - все диски форматну!!!"
Что касается вопроса "Открытие и закрытие привода CD-ROM", то при наличии
более одного CD-ROMа в системе, рекомендую воспользоваться следующими
функциями:
// ____ _ ______ __// / __ \_____(_) _____/_ __/___ ____ / /____// / / / / ___/ / | / / _ \/ / / __ \/ __ \/ / ___/// / /_/ / / / /| |/ / __/ / / /_/ / /_/ / (__ )// /_____/_/ /_/ |___/\___/_/ \____/\____/_/____///(*******************************************************************************
* DriveTools 1.0 *
* *
* (c) 1999 Jan Peter Stotz *
* *
********************************************************************************
* *
* If you find bugs, has ideas for missing featurs, feel free to contact me *
* jpstotz@gmx.de *
* *
********************************************************************************
* Date last modified: May 22, 1999 *
*******************************************************************************)unit DriveTools;
interfaceuses
Windows, SysUtils, MMSystem;
function CloseCD(Drive: Char): Boolean;
function OpenCD(Drive: Char): Boolean;
implementationfunction OpenCD(Drive: Char): Boolean;
var
Res: MciError;
OpenParm: TMCI_Open_Parms;
Flags: DWord;
S: string;
DeviceID: Word;
begin
Result := false;
S := Drive + ':';
Flags := mci_Open_Type or mci_Open_Element;
with OpenParm dobegin
dwCallback := 0;
lpstrDeviceType := 'CDAudio';
lpstrElementName := PChar(S);
end;
Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
if Res <> 0 then
exit;
DeviceID := OpenParm.wDeviceID;
try
Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
if Res = 0 then
exit;
Result := True;
finally
mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
end;
end;
function CloseCD(Drive: Char): Boolean;
var
Res: MciError;
OpenParm: TMCI_Open_Parms;
Flags: DWord;
S: string;
DeviceID: Word;
begin
Result := false;
S := Drive + ':';
Flags := mci_Open_Type or mci_Open_Element;
with OpenParm dobegin
dwCallback := 0;
lpstrDeviceType := 'CDAudio';
lpstrElementName := PChar(S);
end;
Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
if Res <> 0 then
exit;
DeviceID := OpenParm.wDeviceID;
try
Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
if Res = 0 then
exit;
Result := True;
finally
mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
end;
end;
end.
Перевод на русский язык:
Код, предоставленный ниже, это модуль Delphi, содержащий две функции: OpenCD и CloseCD. Эти функции используются для открытия и закрытия CD-ROM приводов в системе с несколькими CD-ROM приводами.
Работает код следующим образом:
Функция OpenCD принимает букву привода (например, 'A', 'B' и т.д.) и пытается открыть соответствующий CD-ROM привод.
Она использует функцию mciSendCommand из модуля MMSystem для отправки команды MCI (Media Control Interface) драйверу.
Команда используется для открытия CD-ROM привода, и если операция успешна, она устанавливает флаг, указывающий, что привод открыт.
Функция CloseCD также принимает букву привода и пытается закрыть соответствующий CD-ROM привод.
Она использует тот же подход, что и функция OpenCD, но с другой командой MCI для установки статуса двери CD-ROM привода в закрытом состоянии.
Обратите внимание, что это код предполагает, что система имеет несколько CD-ROM приводов, и необходимо их обрабатывать отдельно.
Некоторые улучшения, которые я бы предложил:
Обработка ошибок: функции не проверяют ошибки, возвращаемые mciSendCommand. Лучше добавить обработку ошибок для обеспечения возврата успешного кода.
Организация кода: две функции имеют почти идентичный код, который можно было бы рефакторить в одну функцию с параметром, указывающим, открыть или закрыть привод.
Безопасность типов: переменная DeviceID объявлена как Word, но не ясно, какой тип значения она должна содержать. Лучше использовать более конкретный тип, например, Integer.
Читаемость кода: некоторые имена переменных (например, Res, S) можно было бы улучшить для clearer.
Вот альтернативное решение с использованием единой функции с параметром:
В этом коде создается единственная функция CDControl, которая принимает два параметра: букву привода и булевое значение, указывающее, открыть или закрыть привод. Функция затем использует это информацию для отправки соответствующей команды MCI. Функции OpenCD и CloseCD являются просто обертками вокруг функции CDControl.
Открытие и закрытие нескольких приводов CD-ROM можно выполнить с помощью функций OpenCD и CloseCD из модуля DriveTools для программирования на языке Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.