一个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方式导出时总不行呢?
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方式导出时总不行呢?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货