一个MFC DLL,导出了函数 A,这个函数动态创建了IE控件WebBrowser1,并且打开一个 flash动画,我想在WebBrowser的DISPID_DOCUMENTCOMPLETE事件响应中获得这个flash动画的窗口句柄,如下代码都是在查找"MacromediaFlashPlayerActiveX" 找不到,不知道为什么?代码一:
BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
TCHAR szClassName[100];
::GetClassName( hwnd, szClassName, sizeof(szClassName));
if( _tcscmp( szClassName, _T("MacromediaFlashPlayerActiveX") ) == 0 )
{
*(HWND*)lParam = hwnd;
g_hFlash = hwnd;
return FALSE; // 找到FLASH窗口就停止
}
else
return TRUE; // 继续枚举子窗口
};void CWebBrowser::OnDocumentComplate(IDispatch *,VARIANT* url)
{
   .....
   HWND hwnd=NULL;
   HWND hparent = GetOwner()->m_hWnd;
   ::EnumChildWindows( hparent, EnumChildProc, (LPARAM)&hwnd );   //为什么返回的hwnd总是NULL?
}代码二:
void CWebBrowser::OnDocumentComplate(IDispatch *,VARIANT* url)
{    HWND hWeb = GetSafeHwnd();
HWND hView = ::FindWindowEx(hWeb, NULL, "Shell DocObject View", NULL); //可以找到
HWND hServer = ::FindWindowEx(hView, NULL, "Internet Explorer_Server", NULL);//可以找到
HWND hFlash = ::FindWindowEx(hServer, NULL, "MacromediaFlashPlayerActiveX", NULL);
        //hFlash还是NULL?
}
如果在新建一个MFC Dialog EXE程序,把WebBrowser控件放上去,使用上面任何一份代码都可以找到Flash控件的句柄。
在 Spy++查看时,窗口关系也是这样,可为什么在DLL方式导出时总不行呢?