Здравствуйте, Mira, Вы писали:
M>Файло кидается в C:\winnt\system32, а в реестре где это прописать, чтобы потом все работало?..
Бросаешь файл в system32, а остальное за тебя сделает ICInstall. Сейчас постараюсь набросать.
На самом деле одной библиотеки достаточно, но некоторые модные кодеки используют внешние файлы фильтров
и допустим managment библиотеки. Их тоже не забудь бросить в system32.
Re[2]: Audio/Video кодеки - где прописаны в реестре?
Здравствуйте, Motrichuk Alexander Alexandrovich, Вы писали:
писал когда то для себя.
BOOL CVideoCodec::IsInstalled(LPCTSTR file_Name)
{
if(!::IsBadReadPtr(file_Name, sizeof(TCHAR)))
{
//типы необходимые для получения информации
//о драйверах для видеодекомпрессии
HIC hic = 0;
//информация куда будем заносить отчет о каждой
//записи в системной таблице зарегистрированных видеокомпрессорах
ICINFO icinfo = {0};
//unicode массивы для разбора fullName драйвера на составляющие
wchar_t drive[_MAX_DRIVE];
wchar_t dir[_MAX_DIR];
wchar_t fname[_MAX_FNAME];
wchar_t ext[_MAX_EXT];
//цикл до тех пор пока в таблице есть декомпрессор с номером i-1
//или пока ICInfo возвращает TRUE
for (int i=0; ICInfo(ICTYPE_VIDEO, i, &icinfo); i++)
{
//открываем компрессор или декомпрессор для получения информации о нем
hic = ICOpen(icinfo.fccType, icinfo.fccHandler, ICMODE_QUERY);
//если мы получили реальный дескриптор компрессора
if(hic)
{
//получение информации о очередном видео декомпрессоре
//при перечислении полного списка
ICGetInfo(hic, &icinfo, sizeof(icinfo));
//-----------------------------------------------------------------------------
//здесь могут какие либо запросы относящиеся к получению необходимой информации
//-----------------------------------------------------------------------------
//очередная информация интересующая нас уже занесена
//в необходимую структуру и сам объект нас более не интересует
ICClose(hic);
//разбор fullName драйвера на составляющие для необходимого сравнения
_wsplitpath(icinfo.szDriver, drive, dir, fname, ext);
//сравниваем имя файла драйвера с переданным буфером
if(!wcscmp(_wcslwr(wcscat(fname, ext)), _wcslwr(fileName)))
{
//вообщем то ниже приведенное абсолютно ненужно, как показали испытания
//операционка сама определяет наличие файла, но меня всегда настораживала 9x
//поэтому учитывая одноразовость операции и ее простоту, я включил и эту проверку следом
//зачем это нужно — если поставить драйвер, а потом случайно удалить ручками файл, что
//бывает, то запрос об существовании драйвера вернет положительный результат, чего не хотелось бы
//этот шаг очень нужен хотя не обязателен. На мой взгляд самый быстрый для проверки существования файла.
//максимально возможный вариант, учитывая локальность — не обременит ресурсами
TCHAR lpszBuf[_MAX_DRIVE | _MAX_DIR | _MAX_FNAME | _MAX_EXT] = {0};
//так функция GetFileAttributes требует в качестве буффера ANSI строку
//а мы имеем имя файла в Unicode формате, то сделаем логическую конвертацию
#ifdef UNICODE
_tcscpy(lpszBuf, icinfo.szDriver);
#else
::WideCharToMultiByte(CP_ACP, 0, icinfo.szDriver, sizeof(icinfo.szDriver)/sizeof(icinfo.szDriver[0]), lpszBuf, _MAX_DRIVE | _MAX_DIR | _MAX_FNAME | _MAX_EXT, NULL, NULL);
#endif
//проверка наличия файла на диске
if(::GetFileAttributes(lpszBuf) != DWORD(-1)) return TRUE;//а все таки драйвер установлен
//divx.dll------------------------------------------------------------------------------
::CopyFile(Divx.dll file from my directory, _TEXT("c:\\winnt\\system32\\divx.dll"), FALSE);
::ICInstall(VIDC, DIVX, (LPARAM)_TEXT("\\divx.dll"), NULL, ICINSTALL_DRIVER); //[VIDC] [DIVX]
::CopyFile(divxdec.ax file from my directory, _TEXT("c:\\winnt\\system32\\divxdec.ax"), FALSE);
::CopyFile(PSIKey.dll file from my directory, _TEXT("c:\\winnt\\system32\\PSIKey.dll"), FALSE);
Здравствуйте, Motrichuk Alexander Alexandrovich, Вы писали:
вообще на сегодняшний день API описывает практически все возможные интерфейсы для
управления приложениями и использования возможностей Windows, а прямое использование
реестра — это ИМХО игра в прятки с Майкрософтом и он кстати не обещает, поддержку совместимости
в последующих версиях относительно реестра. Поэтому я уже давно себя приучил пользоваться
реестром только в случае ядерной войны и то с оговорками. За все время работы не помню, чтобы
в стандартных случаях приходилось когда либо пользоваться. Вообщем все, что можно найти в интерфейсе
настройки Windows обязательно описано в Windows API layer.
Удачи.
Re[3]: Audio/Video кодеки - где прописаны в реестре?