Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мультимедиа устройства, список mmc устройств 
:(
    Опции темы
TomSoyer
Дата 21.2.2006, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 18.1.2006
Где: РОССИЯ Иркутск

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



Кто нибудь подскажите как получить список Мультимедиа устройств в Visual C++. Покажите на примере.
Заранее благодарен. smile
PM MAIL ICQ   Вверх
AndreySol
Дата 21.3.2006, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понятие Мультимедиа-устройств включает наверно все от звуковой карты заканчивая джойстиками. Универсальной ф-ции не знаю, вот пример получения устройств звука на DirectShow (нужные хедеры и либы я думаю сам разберешся), добавляет найденные в ListBox:
Код

IEnumMoniker *pEnumCat = NULL;
ICreateDevEnum *pSysDevEnum = NULL;
    
// получаем список доступных устройств записи звука
if(CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, IID_ICreateDevEnum, (void **)&pSysDevEnum) != S_OK)
    bReturn = FALSE;
else
{    // Enumerate all filters of the selected category  
    if(pSysDevEnum->CreateClassEnumerator(*clsid, &pEnumCat, 0) == S_OK)
    {
        IMoniker *pMoniker = 0;
        ULONG cFetched = 0;
        VARIANT varName = {0};
        int nFilters = 0;

        // If there are no filters of a requested type, show default string
        if (!pEnumCat)
        {
            m_listenumdev.AddString(TEXT("<< No entries >>\0"));
            return FALSE;
        }
        else
            m_listenumdev.EnableWindow(TRUE);

        // Enumerate all items associated with the moniker
        while(pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK)
        {
            IPropertyBag *pPropBag;

            // Associate moniker with a file
            if(pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag) == S_OK)
            {    // Read filter name from property bag
                varName.vt = VT_BSTR;
                if(pPropBag->Read(L"FriendlyName", &varName, 0) == S_OK)
                {
                    // Get filter name (converting BSTR to a CString)
                    CString str(varName.bstrVal);
                    SysFreeString(varName.bstrVal);
                    nFilters++;

                    // Add the category name and a pointer to its CLSID to the list box
                    int nSuccess  = m_listenumdev.AddString(str);
                    int nIndexNew = m_listenumdev.FindStringExact(-1, str);

                    nSuccess = m_listenumdev.SetItemDataPtr(nIndexNew, pMoniker);
       
                    // Cleanup interfaces
                    if(pPropBag)
                    {
                            pPropBag->Release();
                            pPropBag = NULL;
                    }
                }
            }
        }
        if(pEnumCat)
        {
            pEnumCat->Release();
            pEnumCat = NULL;
        }
    }
    else
        bReturn = FALSE;
    pSysDevEnum->Release();
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




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


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

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