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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Идентификаток CD диска, Как сделать 2 и более? 
:(
    Опции темы
KEM
Дата 5.3.2007, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Доброе время суток!  Есть вот такой замечательный пример кода получиния идентификатора CD диска. Но у меня он определяет и выдаёт только код с сидирума(физического), а нужно чтоб ещё и с виртуального диска и второго физического сидюка(вообщем для всех CD приводов в системе). Как это сделать я так и не вкурил, может есть у кого какие мысли ? Код ниже.
Код

uses MMSystem;


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;



Это сообщение отредактировал(а) KEM - 5.3.2007, 01:41
--------------------
Мы растворяем сознание жизни, реальностью стал бешеный ритм...
PM MAIL   Вверх
MetalFan
Дата 5.3.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



в поиск. было.
http://forum.vingrad.ru/index.php?showtopi...t&p=1010260
http://forum.vingrad.ru/index.php?showtopi...t&p=1054835


Это сообщение отредактировал(а) MetalFan - 5.3.2007, 08:52


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
KEM
Дата 5.3.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всё это видел, оба алгоритма мне выдают одни нули, возможно им нужен некий лицензионный диск? Мне не суть важен производитель, мне нужен ID диска, его чудесно получает код выше, но как его расширить на произвольный привод ?
--------------------
Мы растворяем сознание жизни, реальностью стал бешеный ритм...
PM MAIL   Вверх
MetalFan
Дата 5.3.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата

возможно им нужен некий лицензионный диск?

при чем тут лицензионный диск?

Цитата

Мне не суть важен производитель, мне нужен ID диска

нет такого понятия "ID диска". по крайней мере изначально у болванки нет никакого уникального ID, только так называемый ID производителя.

Цитата

его чудесно получает код выше

код , AFAIK, получает ID сессии диска(наверное). который меняется при каждой (до)записи на диск. и легко передирается.


Цитата

но как его расширить на произвольный привод ?

в коде было несколько недочетов...
вот немного поправленный вариант:
Код

function GetCDid( ADrive: char ): string;
var
  InfoParams: TMCI_Info_Parms;
  s: array [0..16] of char;
  OpenParams: TMCI_Open_Parms;
  CloseParams: TMCI_Generic_Parms;
  lDriveName: string;
begin
  result := '';
  FillChar(InfoParams, SizeOf (InfoParams), #0);
  FillChar( OpenParams, SizeOf (OpenParams), #0);
  FillChar( CloseParams, SizeOf (CloseParams), #0);

  lDriveName := UpCase(ADrive)+':';
  OpenParams.lpstrElementName := PChar( lDriveName );
  OpenParams.dwCallback := 0;
  OpenParams.lpstrDeviceType := PAnsiChar(MCI_DEVTYPE_CD_AUDIO);

  InfoParams.lpstrReturn := @s[0];
  InfoParams.dwRetSize := 16;

  if mciSendCommand( 0,
                     MCI_OPEN,
                     MCI_OPEN_TYPE or MCI_OPEN_TYPE_ID or MCI_OPEN_ELEMENT,
                     Longint(@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(@CloseParams));
end;


Это сообщение отредактировал(а) MetalFan - 6.3.2007, 11:39


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.

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


 




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


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

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