Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 038

/ вопрос решён /

Здравствуйте, эксперты! Как определить физические дисководы в списке CD-ROM'ов?

Vetalion Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Vetalion (статус: Посетитель)
Вопрос отправлен: 3 ноября 2008, 01:10
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: ANBsoft

Здравствуйте, Vetalion!
Скорее всего никак, эмуляторы для того и созданы, чтобы обманывать программы и защиты.
С точки зрения программы физический и виртуальный диски выглядят одинаково.
Уже много лет идет противостояние между хакерами и защитой StarForce и поке не в пользу защиты.

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 3 ноября 2008, 08:18
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Vetalion!
С помощью WMI можно определить производителя CD-ROMа. У привада есть много свойств/полей. Смотрите пример в приложении. Возможно он вас направит на путь истенный.
Есть еще примеры по работе с аудио CD...

P.S. Желаю удачи.

Приложение:
  1. unit Unit1;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, WbemScripting_TLB, OleServer, ActiveX, StdCtrls, ExtCtrls,
  6. ComCtrls;
  7. type
  8. TForm1 = class(TForm)
  9. ListBox1: TListBox;
  10. SWbemLocator1: TSWbemLocator;
  11. Button1: TButton;
  12. procedure Button1Click(Sender: TObject);
  13. private
  14. { Private declarations }
  15. public
  16. { Public declarations }
  17. end;
  18. var
  19. Form1: TForm1;
  20. implementation
  21.  
  22. {$R *.dfm}
  23. procedure TForm1.Button1Click(Sender: TObject);
  24. var
  25. Service: ISWbemServices;
  26. ObjectSet: ISWbemObjectSet;
  27. SObject: ISWbemObject;
  28. PropSet: ISWbemPropertySet;
  29. SProp: ISWbemProperty;
  30. PropEnum, Enum: IEnumVariant;
  31. TempObj: OleVariant;
  32. Value: Cardinal;
  33. dr:string;
  34. begin
  35. ListBox1.Clear;
  36. Service:= SWbemLocator1.ConnectServer('.', 'rootCIMV2', '', '', '','', 0, nil);
  37. SObject:= Service.Get('Win32_CDROMDrive', wbemFlagUseAmendedQualifiers, nil);
  38. ObjectSet:= SObject.Instances_(0, nil);
  39. Enum:= (ObjectSet._NewEnum) as IEnumVariant;
  40. dr:='';
  41. while (Enum.Next(1, TempObj, Value) = S_OK) do
  42. begin
  43. SObject:= IUnknown(TempObj) as SWBemObject;
  44. PropSet:= SObject.Properties_;
  45. PropEnum:= (PropSet._NewEnum) as IEnumVariant;
  46. while PropEnum.Next(1, TempObj, Value) = S_OK do
  47. begin
  48. SProp:= IUnknown(TempObj) as SWBemProperty;
  49. if SProp.Name='Drive' then dr:=SProp.Get_Value;
  50. if SProp.Name='Name' then ListBox1.AddItem(dr+' '+SProp.Get_Value, nil);
  51. end;
  52. end;
  53. end;
  54. end.


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 3 ноября 2008, 16:06
Оценка за ответ: 5

Комментарий к оценке: Похоже это то, что надо

Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 4 ноября 2008, 10:11; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 3 ноября 2008, 01:18 [#1]:

Физические - в смысле действительно "физические", то есть, не эмулируемые с помощью Alchohol и подобных?
Галочка "подтверждения прочтения" - вселенское зло.
Vetalion

Vetalion (статус: Посетитель), 3 ноября 2008, 01:24 [#2]:

Да
Vetalion

Vetalion (статус: Посетитель), 3 ноября 2008, 08:42 [#3]:

В HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum по подключению (IDE или SCSI) можно определить, но как найти имя устройства?
Vetalion

Vetalion (статус: Посетитель), 3 ноября 2008, 09:24 [#4]:

Еще вариант: в диспетчере устройств, DVD и CD-ROM дисководы в свойствах диска есть пункт "Код экземпляра устройства", где видно подключение (IDE или SCSI). Как программно найти "Код экземпляра устройства"?
P.S. Очень нужно.
Вадим К

Вадим К (статус: Академик), 3 ноября 2008, 10:22 [#5]:

Есть такая функция GetDriveType, здесь на сайте в ответах я уже когда то писал о ней и приводил куски кода. Поищите, может это то, что надо.
Но надо помнить, что хороший качественный эмулятор не даст Вам определить, что он не настоящий.
P.S. - Мне тоже много чего очень нужно. Но иногда в порыве своих мыслей мы изобретаем ненужные решения. Или решения через очень тернистые пути....
Галочка "подтверждения прочтения" - вселенское зло.
Vetalion

Vetalion (статус: Посетитель), 3 ноября 2008, 10:44 [#6]:

GetDriveType... С её помощью я определяю, что Drive такой-то является CD-ROM'ом, но каким - нет. Может все-таки реестр?
Vetalion

Vetalion (статус: Посетитель), 4 ноября 2008, 09:56 [#7]:

Уважаемые эксперты! Всем вам огромное спасибо. Тему можно считать закрытой.
Feniks

Feniks (статус: Бакалавр), 4 ноября 2008, 10:11 [#8]:

Всегда пожалуйста ;-) Приходите еще.

31 января 2011, 19:32: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.03 сек.