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

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

  • НЕ МОЖЕТ создавать LOCAL_SERVER, независимо от того, что я пытаюсь.
    за CLSCTX_LOCAL_SERVER Я всегда получаю class not registered error,

  • Запустил консольное приложение, преобразовал его в приложение Windows, которое имеет Насос сообщения как предложено здесь, но все еще не может играть в 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);
    

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

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

Поэтому все, о чем я прошу, — это то, что я пытаюсь, МОЖНО ЛИ ВСЕ?

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

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

0

Решение

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

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

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

2

Другие решения


По вопросам рекламы [email protected]