Подключиться к экземпляру Flash в webbrowser
От: Alexxx  
Дата: 21.11.08 10:42
Оценка:
Хай All.

Народ, подскажие кто знает.
Есть задача управлять флешом, открытым в своем броузере.

Делаю:

#import "C:\WINDOWS\system32\Macromed\Flash\Flash9f.ocx" rename_namespace("Flash") named_guids

void __stdcall CExplorerWindow::OnDocumentComplete ( IDispatch* pDisp, VARIANT * URL )
{
     CComPtr<Flash::IShockwaveFlash> flash;
     pDisp->QueryInterface(&flash);
     if (flash)
     {
     //сюда никогда не заходит
     }
     ...
}


Пробовал решить вопрос через открытое окно (когда в броузере открывается флэш (скажем c:\1.swf), то создается окно MacromediaFlashPlayerActiveX)
Причем когда вызывается функция OnDocumentComplete, то окна еще нет.


LRESULT CExplorerWindow::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    HWND hWnd = hAx;        
    hWnd =  ::FindWindowEx(hWnd,NULL,"Shell Embedding", "");
    hWnd =  ::FindWindowEx(hWnd,NULL,"Shell DocObject View", "");
    hWnd =  ::FindWindowEx(hWnd,NULL,"Internet Explorer_Server", "");
    hWnd =  ::FindWindowEx(hWnd,NULL,"MacromediaFlashPlayerActiveX", "");
    if (hWnd) 
    {
        CAxWindow FlashWindow = hWnd;
        if (FlashWindow)
        {
            CComPtr<Flash::IShockwaveFlash> flash;
            FlashWindow.QueryControl(&flash);
            
            if (flash) 
                        {
                            //сюда никогда не заходит
                        }
        }
    }
...
}



Пробовал перебирать коллекцию элементов IHTMLElementCollection::get_all, пробовал получить в OnDocumentComplete через pDisp указатель на IWebBrowser2, через него указательна Документ, а через него уже получить доступ к флэш, но это тоже не помогло.

Само окно броузера создаю так:


    hAx = ::CreateWindow(CAxWindow::GetWndClassName(),_T("{8856F961-340A-11D0-A96B-00C04FD705A2}"),
        WS_CHILD|WS_VISIBLE,
        MainWndRect.left,
        MainWndRect.top,
        MainWndRect.right - MainWndRect.left,
        MainWndRect.bottom - MainWndRect.top,
        this->m_hWnd,(HMENU)1,NULL,NULL);
    
    

    CAxWindow wndIE = hAx;



Пробовал и wndIE.QueryControl(&flash); но тоже результатов не принесло.

Самое главное, что просто в диалоговом приложении все работает

    CAxWindow ContWnd;
    RECT rc;
    GetClientRect(&rc);

    ContWnd.Create(m_hWnd, rc, "ShockwaveFlash.ShockwaveFlash.9", WS_VISIBLE|WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS);

    
    CComPtr<Flash::IShockwaveFlash> flash;
    ContWnd.QueryControl(&flash);
    if (flash) flash->LoadMovie(0, L"http://video.rutube.ru/a91784c6123e512da1b828b9d21756b2");


Но тут мы объект создаем сами, а мне надо подключиться к уже запущенному.

Какое великое шаманство надо совершить, чтобы все стало ок ??
Заранее спасибо.
Re: Подключиться к экземпляру Flash в webbrowser
От: Alexxx  
Дата: 24.11.08 11:54
Оценка:
Короче забавная фигня получается...

Если в самом html в тэге object стоит classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", то получается подключиться, однако на сайтах youtube, rutube своя надстройка над флэш и когда вызываешь методы флэша play, stop, то ничего не происходит.

Сталкивался кто-нить с этим и как бороться?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.