我正在使用嵌入式Web 浏览器控件在我的基于对话框的 MFC 窗口中,我需要知道其中 Web 浏览器控件的 HWND 。我找到了以下代码,它声称可以检索它:
HWND hWndWebBrowser = NULL;
LPUNKNOWN unknown = m_browser.GetControlUnknown();
IWebBrowser2* pWB = NULL;
if(SUCCEEDED(unknown->QueryInterface(IID_IWebBrowser2,(void **)&pWB)))
{
CComPtr<IServiceProvider> pServiceProvider;
if (SUCCEEDED(pWB->QueryInterface(IID_IServiceProvider, (void**)&pServiceProvider)))
{
CComPtr<IOleWindow> pWindow;
if (SUCCEEDED(pServiceProvider->QueryService(SID_SShellBrowser, IID_IOleWindow, (void**)&pWindow)))
{
SHANDLE_PTR hBrowser = 0;
if (SUCCEEDED(pWindow->GetWindow(&hBrowser)))
{
hWndWebBrowser = (HWND)hBrowser;
}
}
}
}
if(unknown)
{
unknown->Release();
}
问题在于,当它运行时返回的句柄不是我所期望的句柄。最好的方法是使用这个 Spy++ 屏幕截图说明:
我知道可以使用EnumChildWindows查找一个带有 Internet Explorer_Server
类名的窗口,但我对使用这个未记录的类名有些担忧。
有没有更好的方法来检索那个(Web浏览器)窗口句柄呢?
bool bHadFocus = ::GetFocus() == hIEWnd;
但为了使其正常工作,我需要知道hIEWnd
。 - c00000fdSpartan_Server
或类似的名称。 - c00000fd