Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Windows Media Player  (Прочитано 12998 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Андрей Переводчик
Гость
« : 24-06-2003 20:25 » 

Как в runtime узнать название композиции, которая проигрывается в WMP? Есть ли у него какой-нибудь интерфейс?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 24-06-2003 20:37 » 

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

Какова задача :?:
Записан

А птичку нашу прошу не обижать!!!
Андрей Переводчик
Гость
« Ответ #2 : 24-06-2003 21:06 » 

Речь идет о проигрывателе. Программа должна определить, что в момент, скажем, нажатия на кнопку играет в майкрософтском проигывателе.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 24-06-2003 21:10 » 

Опять не понял, как она может играть - если она инграет она использует определенный объект COM или ActiveX который и играет - он должен знать что он играет....
Или речь идет о кодеке - типе кодинга музыки.... :?:
Можешь поподробнее...
Записан

А птичку нашу прошу не обижать!!!
Андрей Переводчик
Гость
« Ответ #4 : 24-06-2003 22:28 » 

Есть моя программа. На ней есть кнопка "определить название".
Есть Windows Media Player, который пользователь слушает. Он запустил его без участия моей программы.
При нажатии на кнопку в моей программе должно отобразиться название композиции, которую сейчас слушает пользователь в Windows Media Player.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #5 : 24-06-2003 22:56 » 

Ты должен приконнектится к Объекту - как - сразу не скажу....
Надо копать - может кто знает сразу скажет.... Я сегодня вечерком посижу почитаю...может что и вспомню.
Записан

А птичку нашу прошу не обижать!!!
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 25-06-2003 11:14 » 

По идее MS любезно снабжает все свои продукты интерфесом OLE. После установки WMP он должен зарегистрировать библиотечку.
Запусти VB создай проект и зайди в меню Components...  там в одной из вкладок дожна засветится его библиотека.

Подключаешь ее в свой проект,
Создаешь обектную переменную типа прогрователь(увы я не знаю как именно он будет называться нет у меня WMP)
 для подключения к уже запущеному объекту используется GetObject.
Примерно должно получится так
Код:
dim wmp as new [имя класса из либы(  
set wmp = GetObject)"[имя объекта(": ' имя объекта - его нужно посмотреть в реестре.
Записан

Да да нет нет все остальное от лукавого.
um
Гость
« Ответ #7 : 01-07-2003 14:31 » 

Я предлагаю следующий способ: написать свой простенький фильтр на базе DirectShow и зарегистрировать его в системе. Он по цепочке фильтров может отследить фильтр "file source" и вытащить имя файла, затем, скажем, сохранив его в реестре. Твоя главная аппликация просто читает этот параметр. Минус: будут два файла и на мой взгляд - не очень красиво.

Другой способ заключается в том, чтобы законнектиться к фильтр-графу, уже созданному WMP. Я этот способ не пробовал, но раз GraphEdit это делает, то, думаю, и нам можно. Для более подробных объяснений рекомендую почитать Microsoft DirectShow SDK.
Записан
um
Гость
« Ответ #8 : 02-07-2003 09:28 » new

Я немного погорячился: WMP закладывает в рот (ROT - Running Object Table) не IMoniker->IFilterGraph, а IMoniker->IMediaPlayer и др. Я потратил вечерок и нашел решение (если надо, могу намылить весь проект - сообщите um@aport2000.ru):
P.S. Кстати, можно не только просматривать свойства, но и активно управлять объектами WMP, вызывая методы в соответствии с выбранными интерфейсами.

// MSVC 6.0
#import "msdxm.ocx"

void CSpyWMPDoc::ScanMediaPlayers()
{
using namespace MediaPlayer;
IRunningObjectTable *pROT;
HRESULT hr = GetRunningObjectTable(0, &pROT);
if (FAILED(hr))
return;
IEnumMoniker *penum;
pROT->EnumRunning(&penum);
ULONG cFetched = 0;
IMoniker *pM;
char achFriendlyName[255];
while(penum->Next(1, &pM, &cFetched), cFetched>0) {
WCHAR* sole;
IBindCtx *pbc;
CreateBindCtx(0,&pbc);
pM->GetDisplayName(pbc,0,(LPOLESTR*)&sole);
pbc->Release();
sprintf(achFriendlyName,"%S",sole);            
// псевдоним приложения в ROT
CoTaskMemFree(sole);
IUnknown *pUnk;
hr = pROT->GetObject(pM,&pUnk);
if (SUCCEEDED(hr)){
IMediaPlayer* pmp;
hr = pUnk->QueryInterface(__uuidof(IMediaPlayer), (void **)&pmp);
if (!FAILED(hr)){
CoLockObjectExternal(pmp,true,false);      // lock
AddToList(achFriendlyName,pmp->FileName);
CoLockObjectExternal(pmp,false,false);      // unlock
// pmp->Release();
} else {
AddToList(achFriendlyName,"приложение - не WMP !!! - для отладки");
}
pUnk->Release();
}
pM->Release();    
}
penum->Release();
pROT->Release();
}

void CSpyWMPDoc::AddToList(char *appname,char *filename)
{
CListView* pview =
(CListView*)((CFrameWnd*)AfxGetMainWnd())->GetActiveView();
CListCtrl &ctrl = pview->GetListCtrl();
int row = ctrl.InsertItem(0x7FFFFFFF,"");
ctrl.SetItemText(row,0,appname);
ctrl.SetItemText(row,1,filename);
}
Записан
DPro
Гость
« Ответ #9 : 21-08-2003 10:45 » 

...а вот как узнать подобным образом (из другого приложения) что плеер переключается в полноэкранный режим?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines