#include <shlguid.h> // SID_SWebBrowserApp
// Internet ExplorerのIWebBrowser2を、取得する
//#define SID_SInternetExplorer IID_IWebBrowserApp
//#define SID_SWebBrowserApp IID_IWebBrowserApp
static IWebBrowser2Ptr QueryWebBrowserApp(IUnknown *punk)
{
return InternalQueryService<IWebBrowser2Ptr>(punk, SID_SWebBrowserApp);
}
//#define SID_IBindHost IID_IBindHost
//#define SID_SBindHost IID_IBindHost
static IBindHostPtr QueryBindHost(IUnknown *punk)
{
return InternalQueryService<IBindHostPtr>(punk, SID_SBindHost);
}
static IDownloadManagerPtr QueryDownloadManager(IUnknown *punk)
{
return InternalQueryService<IDownloadManagerPtr>(punk, SID_SDownloadManager);
}
//#define SID_SInternetSecurityManager IID_IInternetSecurityManager
static InternetSecurityManagerPtr QueryInternetSecurityManager(IUnknown *punk)
{
return InternalQueryService<InternetSecurityManagerPtr>(punk, SID_SInternetSecurityManager);
}
//#define SID_SInternetHostSecurityManager IID_IInternetHostSecurityManager
static InternetHostSecurityManagerPtr QueryInternetHostSecurityManager(IUnknown *punk)
{
return ::InternalQueryService<InternetHostSecurityManagerPtr>(punk, SID_SInternetHostSecurityManager);
}
//#define SID_SHlinkFrame IID_IHlinkFrame
static IHlinkFramePtr QueryHlinkFrame(IUnknown *punk)
{
return InternalQueryService<IHlinkFramePtr>(punk, SID_SHlinkFrame);
}
static IHlinkSitePtr QueryContainer(IUnknown *punk)
{
return InternalQueryService<IHlinkSitePtr>(punk, SID_SContainer);
}
//#define SID_SHTMLWindow IID_IHTMLWindow2
static IHtmlWindow2Ptr QueryHTMLWindow(IUnknown *punk)
{
return InternalQueryService<IHtmlWindow2Ptr>(punk, SID_SHTMLWindow);
}
//#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory
static IElementBehaviorFactoryPtr QueryElementBehaviorFactory(IUnknown *punk)
{
return InternalQueryService<IElementBehaviorFactoryPtr>(punk, SID_SElementBehaviorFactory);
}
//#define SID_SOleUndoManager IID_IOleUndoManager
static IOleUndoManagerPtr QueryOleUndoManager(IUnknown *punk)
{
return InternalQueryService<IOleUndoManagerPtr>(punk, SID_SOleUndoManager);
}
template <class _InterfacePtr>
static _InterfacePtr InternalQueryService(IUnknown *punk, REFGUID guidService)
{
HRESULT hr = S_OK;
IServiceProviderPtr spServiceProvider = punk;
if (spServiceProvider == NULL)
{
// ATLASSERT(0);
return NULL;
}
_InterfacePtr spResult;
hr = spServiceProvider->QueryService(guidService, _InterfacePtr::GetIID(), (void**)&spResult);
if (FAILED(hr))
{
return NULL;
}
return spResult;
}