Я пытался добиться автоматизации 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);
Этот код изменяет громкость, но почему-то этот эффект отсутствует в клипе, который воспроизводится.
Тогда я подумал, может быть Invoke
ing отправит сообщения в WMP, на котором запущен текущий клип. Пробовал этот код, но безрезультатно.
Поэтому все, о чем я прошу, — это то, что я пытаюсь, МОЖНО ЛИ ВСЕ?
Raw-COM код для управления медиаплеером? Любые указатели, примеры, фрагменты кода приветствуются. У меня неправильное ощущение, что я просмотрел весь кибер-мир по этому вопросу. Пожалуйста, докажите, что я не прав.
PS: я не хочу делать кодирование ActiveX или MFC.
Эта проблема не имеет ничего общего с тем, что ваше приложение является консольным приложением. Насос сообщений находится вне темы здесь. Вы можете попробовать то же самое с приложением Windows, и оно будет вести себя так же.
Это потому, что в этом случае проигрыватель не размещается как элемент управления (как элемент управления OLE в окне), поэтому он просто не поддерживается. Если вы разместите его в приложении Windows или в Internet Explorer, вы увидите, что он работает нормально.
В этой конфигурации, если вы хотите контролировать громкость, вы должны использовать API громкости звука (и, в частности, ISimpleAudioVolume)