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

Различать звуковые CD

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

Различать звуковые CD


Звонок в компьютерную контору:
- С моим компьютером проблемы, он не включается...
- Как не включается?
- Да пишет все время: "Вставьте дискету, вставьте дискету..."
- А вы вставляли?
- Hет... Как-то не догадался.

Каждый лазерный диск имеет свой идентификатор. Если сохранить, какому диску соответствует какой идентификатор, то можно реализовать определение диска.

В этой программе при нажатии на кнопку происходит проверка, есть ли название этого диска в файле. Если есть, то в заголовок окна выводится его название, если нет, то введенное пользователем название диска сохраняется в файл.


uses
  MMSystem, IniFiles;

function GetCDid: string;
var
  InfoParams: TMCI_Info_Parms;
  s: array [0..63] of char;
  OpenParams: TMCI_Open_Parms;
  CloseParams: TMCI_Generic_Parms;
begin
  result := '';
  FillChar(InfoParams, sizeof(InfoParams), #0);
  InfoParams.lpstrReturn := @s[0];
  InfoParams.dwRetSize := 10;
  OpenParams.dwCallback := 0;
  OpenParams.lpstrDeviceType := 'CDAudio';
  if mciSendCommand(0, mci_Open, mci_Open_Type,
  Longint(addr(OpenParams))) <> 0 then
    Exit;
  if mciSendCommand(OpenParams.wDeviceID, MCI_INFO,
  MCI_INFO_MEDIA_IDENTITY, longint(@InfoParams)) = 0 then
    result := s;
  mciSendCommand(OpenParams.wDeviceID, mci_Close, 0,
  Longint(addr(CloseParams)));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  id: string;
  ini: TIniFile;
  name: string;
begin
  id := GetCDid;
  if id = '' then
  begin
    Form1.Caption := 'No disk';
    Exit;
  end;
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'cd.ini');
  name := ini.ReadString('CD', id, '');
  if name = '' then
  begin
    name := 'CD name';
    if not InputQuery('CD name', 'Enter CD name:', name) then
      Exit;
    ini.WriteString('CD', id, name);
  end;
  Form1.Caption := name;
  ini.Destroy;
end;

Программа на Delphi, использующая библиотеки MMSystem и IniFiles для идентификации CD-дисков и хранения их названия в файле инициализации.

Вот подробное описание того, что код делает:

  1. Функция GetCDid получает идентификатор текущего CD с помощью библиотеки MCI (Media Control Interface). Она отправляет команду на устройство-дрейвер MCI для открытия устройства CDAudio, затем запросывает медиаидентификацию CD и возвращает ее как строку.
  2. Процедура Button1Click вызывается при клике пользователем на кнопку формы. Она вызывает функцию GetCDid, чтобы получить идентификатор текущего CD.
  3. Если идентификатор пуст (т.е., нет вставленного CD), процедура устанавливает заголовок формы на "No disk" и выходит.
  4. В противном случае она читает имя, связанное с идентификатором CD из файла инициализации cd.ini. Если не найдено имя, она спрашивает пользователя ввести имя с помощью диалогового окна ввода.
  5. Введенное имя хранится в файле cd.ini под ключом идентификатора CD.
  6. Наконец, процедура устанавливает заголовок формы на полученное или введенное имя CD.

Некоторые предложения по улучшению:

  • вместо жесткого кодирования пути к файлу инициализации (cd.ini) в коде, рассмотрите более гибкую approached, такие как хранение его в конфигурационном файле или переменной среды.
  • Рассмотрите добавление механизмов обработки ошибок и журналирования для обработки потенциальных проблем с чтением/записью файла инициализации или взаимодействием с драйвером MCI.
  • Функция GetCDid могла быть улучшена, возвращая пустую строку, если произошла ошибка при выполнении команды MCI, а не просто выйти.
  • Диалоговое окно ввода могло быть настроено с дефолтным значением и/или подсказкой для более пользовательского интерфейса.

В целом, это хороший старт для идентификации CD-дисков и хранения их названия в файле инициализации. С некоторыми улучшениями код может стать еще более robust и пользовательский.

Программа для определения звукового компакт-диска, которая использует идентификатор диска и сохраняет информацию о названии диска в файле.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 12:27:44/0.0037879943847656/0