C ++ - Возможна ли вообще автоматизация проигрывателя Windows Media без ActiveX или MFC?

0

Я пытался добиться Media Player Automation. Я почти всегда старался изо всех сил осознавать, но без всяких успехов. Немногие из попыток перечислены ниже.

  • CAN-NOT не создает LOCAL_SERVER, независимо от того, что я пытаюсь. для CLSCTX_LOCAL_SERVER Я всегда получаю class not registered error.

  • Начал с консольного приложения, преобразовал его в приложение Window, у которого есть Message Pump, как предложено здесь, но все равно не может воспроизводить WMP.

  • Во всяком случае, я пошел вперед с IWMPPlayer4, на котором действительно работает метод openPlayer(), открывает WMP и начинает играть в клип. Но любые другие сообщения не доходят до WMP. Например, для

    IWMPSettings    *pMediaPlayerSettings = NULL;
    hr = pMediaPlayer4->get_settings(&pMediaPlayerSettings);
    
    if(FAILED(hr))
        {
            std::cout << "ERR - Could not get WMPSettings Interface Pointer" << std::endl;
            ReleaseInterfaces((IUnknown**)&pMediaPlayer4);
            return 0;
        }
    
    std::cout << "Got settings.. lets change volume" << std::endl;
    int cnt = 10;
    while(cnt > 1)
    {
        long vol = -1.0;
        Sleep(2000);
        hr = pMediaPlayerSettings->get_volume(&vol);
        if(FAILED(hr))
        {
            std::cout << "ERR - Could not change the volume" << std::endl;
        }
        std::cout << "Currently volume is: " << vol << std::endl;
        hr = pMediaPlayerSettings->put_volume(cnt*cnt);
        cnt--;
    }
    
    ReleaseInterfaces((IUnknown**) &pMediaPlayerSettings);
    

    Этот код ИЗМЕНЯЕТ громкость, но каким-то образом этот эффект отсутствует в клипе, который воспроизводится.

  • Тогда я подумал, что может быть Invoke ing отправит сообщения в WMP, запускающий текущий клип. Пробовал и этот код, но безрезультатно.

Так что все, о чем я прошу, - это то, что я пытаюсь, ЕСТЬ ВОЗМОЖНО НА ВСЕ?

Код Raw-COM для управления медиаплеером? Любые указатели, примеры, фрагменты кода более чем приветствуются. У меня есть неправильное чувство, что я занимаюсь серфингом в этом вопросе. Пожалуйста, докажите, что я неправ.

PS: Я не хочу делать кодировку ActiveX или MFC.

Теги:
com
windows-media-player
wmp

1 ответ

2
Лучший ответ

Эта проблема не имеет ничего общего с тем, что ваше приложение является консольным приложением. Насос сообщения находится вне темы. Вы можете попробовать то же самое с приложением Windows, и оно будет вести себя одинаково.

Это потому, что в этом случае плеер не размещен в качестве элемента управления (как элемент управления OLE в окне), поэтому он просто не поддерживается. Если вы разместите его в приложении Windows или в Internet Explorer, вы увидите, что он работает нормально.

В этой конфигурации, если вы хотите управлять томом, вы должны использовать аудио-интерфейсы громкости (и, в частности, ISimpleAudioVolume)

  • 0
    Я не понял, что означает «если вы размещаете плеер в своем приложении для Windows ...», значит, я должен запустить WMP.exe из моей программы? Не могли бы вы рассказать подробнее? Как точно, как разместить плеер в моем приложении?
  • 0
    В семействе объектов COM есть также элементы управления COM, также называемые элементами управления OLE или ActiveX. Вы можете разместить их только 1) визуально и 2) с помощью окон. Например, вот как вы можете разместить WMP: msdn.microsoft.com/en-us/library/windows/desktop/… Невозможно разместить элемент управления WMP в консольном приложении без окна (по определению). С Media Player вы можете использовать объект (как вы делаете) или элемент управления. Это полностью меняет его поведение.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню