Господа, буду очень признателен, если кто-нибудь поможет решить следующую проблему. Так получилось, что написаному мной DirectShow-фильтру необходимо знать, в какое окно в конце концов попадает идущий через мой фильтр видеопоток (в идеале было бы хорошо получить hwnd окна). Порылся в DirectX-хелпе, но ничего полезного на эту тему не нашел. Кто-нибудь знает, что тут можно сделать?
Заранее благодарен.
Макс.
Здравствуйте, justicar, Вы писали:
J>Господа, буду очень признателен, если кто-нибудь поможет решить следующую проблему. Так получилось, что написаному мной DirectShow-фильтру необходимо знать, в какое окно в конце концов попадает идущий через мой фильтр видеопоток (в идеале было бы хорошо получить hwnd окна). Порылся в DirectX-хелпе, но ничего полезного на эту тему не нашел. Кто-нибудь знает, что тут можно сделать?
J>Заранее благодарен.
J>Макс.
Сам не пробовал, но предположительно это делается так:
IVideoWindow *pVidWin = NULL;
m_pGraph->QueryInterface(IID_IVideoWindow, (void**)&pVidWin);
HWND hWndOwner = NULL;
pVidWin->get_Owner((OAHWND)&hWndOwner);
HWND hWndVideo = FindWindowEx(hWndOwner, NULL, "VideoRenderer", NULL);
Здравствуйте, romson, Вы писали:
R>Здравствуйте, justicar, Вы писали:
J>>Господа, буду очень признателен, если кто-нибудь поможет решить следующую проблему. Так получилось, что написаному мной DirectShow-фильтру необходимо знать, в какое окно в конце концов попадает идущий через мой фильтр видеопоток (в идеале было бы хорошо получить hwnd окна). Порылся в DirectX-хелпе, но ничего полезного на эту тему не нашел. Кто-нибудь знает, что тут можно сделать?
J>>Заранее благодарен.
J>>Макс.
R>Сам не пробовал, но предположительно это делается так:
R>R>IVideoWindow *pVidWin = NULL;
R>m_pGraph->QueryInterface(IID_IVideoWindow, (void**)&pVidWin);
R>HWND hWndOwner = NULL;
R>pVidWin->get_Owner((OAHWND)&hWndOwner);
R>HWND hWndVideo = FindWindowEx(hWndOwner, NULL, "VideoRenderer", NULL);
R>
Ну да... но так некрасиво. Тем более что окно будет называться ActiveMovie. Нет, раз уж фильтру потребовался hwnd, у меня серьезные подозрения, что вместо этого фильтра должен быть plug-in presenter. Если это очень прикладной фильтр (т.е. не требуется, чтобы graphedt автоматически все в нем настраивал), и если он применяется конкретной программой, тогда нужно:
1. Инициализировать VMR в windowless mode (когда окно видеовывода принадлежит и управляется клиентским приложением)
2. Фильтр должен имлементировать какой нибудь свой интерфейс (что-нибудь вроде IMyFilterConfig с методом SetWindowHandle)
а вот лезть напрямую к handle окна, особенно если это спрятанное окно VMR -- не нужно, последствия непредсказуемы.
Что делает Ваш фильтр?
Dennis Evseev
SDE @ WMDG Windows Media
Microsoft corp.
Note: this message is a private opinion of a sender and not the one of Microsoft corp. This message tranfers no rights and bears no responsibility. Бла бла.