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

Как запретить автоматический запуск WinDVD в Windows 7 для сравнения проигрывателей

Delphi , Синтаксис , API реализация

Вопрос, с которым сталкивается разработчик, заключается в необходимости предотвратить автоматический запуск WinDVD при вставке нового диска в процессе сравнения двух проигрывателей, работающих одновременно с одним и тем же DVD. Это необходимо для проведения качественных тестов и определения лучшего проигрывателя для включения в новую линейку компьютеров компании.

Проблема

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

Понимание проблемы

Разработчик пытается создать программу, которая бы подавляла автоматический запуск второго проигрывателя при вставке диска. Сначала была попытка перехватить сообщение WM_DEVICECHANGE для создания глобального хука, но это не привело к блокировке способности WinDVD запускаться при вставке нового диска.

Варианты решения

Исходя из комментариев, были предложены следующие варианты:

  1. Использование IOCTL_STORAGE_MCN_CONTROL для отключения уведомлений от устройства.
  2. Инъекция DLL в WinDVD для замены обработчика окон, чтобы перехватывать сообщения до их обработки проигрывателем.
  3. Отключение автоматического запуска программным способом, перехватывая сообщение "QueryCancelAutoPlay".
  4. Отключение функционала автоматического запуска через реестр, изменяя значение ключа HKLM\System\CurrentControlSet\Services\CDRom\Autorun на 0.

Подтвержденный ответ

Попытка использовать IOCTL_STORAGE_MCN_CONTROL для отключения уведомлений требует открытия файла с доступом FILE_READ_ATTRIBUTES. Пример кода на Object Pascal (Delphi) для этого:

var
  rlen: DWORD;
  pVal: PBOOL;
  res: BOOL;
  h: THandle;
begin
  rlen := 0;
  GetMem(pVal, SizeOf(BOOL));
  pVal^ := TRUE;
  h := CreateFile(PChar('\\.\D:'), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
  if h <> INVALID_HANDLE_VALUE then
  begin
    res := DeviceIoControl(h, IOCTL_STORAGE_MCN_CONTROL, pVal, SizeOf(BOOL), nil, 0, rlen, nil);
    if not res then
    begin
      ShowMessage('Error');
    end
    else
    begin
      ShowMessage('Device Notification Disabled');
    end;
    CloseHandle(h);
    // Уведомление устройства восстанавливается после закрытия файла
  end;
end;

Однако, после закрытия файла, уведомление устройства восстанавливается, что делает этот метод неэффективным для постоянного отключения автоматического запуска.

Рекомендация

Наиболее предпочтительный способ — отключение автоматического запуска через реестр, что позволит избежать постоянного перехвата сообщений и позволит проводить тестирование без вмешательства в работу автоматического запуска, сфокусировавшись на качестве воспроизведения и производительности проигрывателей.

Создано по материалам из источника по ссылке.

Разработчик пытается предотвратить автоматический запуск программы WinDVD при вставке нового диска для сравнения проигрывателей в Windows 7 и упрощения процесса тестирования.


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

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




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


:: Главная :: API реализация ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 11:57:53/0.0058469772338867/1