Created
April 19, 2015 21:23
-
-
Save kumatti1/45251819c6cbf92e3018 to your computer and use it in GitHub Desktop.
BHO_ATL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// dllmain.cpp : DllMain の実装 | |
#include "stdafx.h" | |
#include "resource.h" | |
#include "HelloWorld_i.h" | |
#include "dllmain.h" | |
CHelloWorldModule _AtlModule; | |
// DLL エントリ ポイント | |
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) | |
{ | |
if (dwReason == DLL_PROCESS_ATTACH) | |
{ | |
DisableThreadLibraryCalls(hInstance); | |
} | |
return _AtlModule.DllMain(dwReason, lpReserved); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// HelloWorldBHO.cpp : CHelloWorldBHO の実装 | |
#include "stdafx.h" | |
#include "HelloWorldBHO.h" | |
// CHelloWorldBHO | |
STDMETHODIMP CHelloWorldBHO::SetSite(IUnknown* pUnkSite) | |
{ | |
if (pUnkSite != NULL) | |
{ | |
// IWebBrowser2 へのポインタをキャッシュします。 | |
HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser); | |
if (SUCCEEDED(hr)) | |
{ | |
// DWebBrowserEvents2 からのイベントをシンクに登録します。 | |
hr = DispEventAdvise(m_spWebBrowser); | |
if (SUCCEEDED(hr)) | |
{ | |
m_fAdvised = TRUE; | |
} | |
} | |
} | |
else | |
{ | |
// イベント シンクの登録を抹消します。 | |
if (m_fAdvised) | |
{ | |
DispEventUnadvise(m_spWebBrowser); | |
m_fAdvised = FALSE; | |
} | |
// ここで、キャッシュしたポインタなどのリソースを解放します。 | |
m_spWebBrowser.Release(); | |
} | |
// 基本クラスの実装を呼び出します。 | |
return IObjectWithSiteImpl<CHelloWorldBHO>::SetSite(pUnkSite); | |
} | |
void STDMETHODCALLTYPE CHelloWorldBHO::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL) | |
{ | |
// サイトから最上位レベルのウィンドウを取得します。 | |
HWND hwnd; | |
HRESULT hr = m_spWebBrowser->get_HWND((LONG_PTR*)&hwnd); | |
if (SUCCEEDED(hr)) | |
{ | |
//ページが読み込まれるときに、メッセージ ボックスを出力します。 | |
MessageBox(hwnd, L"Hello World!", L"BHO", MB_OK); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// HelloWorldBHO.h : CHelloWorldBHO の宣言 | |
#pragma once | |
#include "resource.h" // メイン シンボル | |
#include "HelloWorld_i.h" | |
#include <shlguid.h> // IID_IWebBrowser2、DIID_DWebBrowserEvents2 など | |
#include <exdispid.h> // DISPID_DOCUMENTCOMPLETE など | |
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA) | |
#error "DCOM の完全サポートを含んでいない Windows Mobile プラットフォームのような Windows CE プラットフォームでは、単一スレッド COM オブジェクトは正しくサポートされていません。ATL が単一スレッド COM オブジェクトの作成をサポートすること、およびその単一スレッド COM オブジェクトの実装の使用を許可することを強制するには、_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA を定義してください。ご使用の rgs ファイルのスレッド モデルは 'Free' に設定されており、DCOM Windows CE 以外のプラットフォームでサポートされる唯一のスレッド モデルと設定されていました。" | |
#endif | |
using namespace ATL; | |
// CHelloWorldBHO | |
class ATL_NO_VTABLE CHelloWorldBHO : | |
public CComObjectRootEx<CComSingleThreadModel>, | |
public CComCoClass<CHelloWorldBHO, &CLSID_HelloWorldBHO>, | |
public IObjectWithSiteImpl<CHelloWorldBHO>, | |
public IDispatchImpl<IHelloWorldBHO, &IID_IHelloWorldBHO, &LIBID_HelloWorldLib, /*wMajor =*/ 1, /*wMinor =*/ 0>, | |
public IDispEventImpl<1, CHelloWorldBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1> | |
{ | |
public: | |
CHelloWorldBHO() | |
{ | |
} | |
STDMETHOD(SetSite)(IUnknown *pUnkSite); | |
DECLARE_REGISTRY_RESOURCEID(IDR_HELLOWORLDBHO) | |
DECLARE_NOT_AGGREGATABLE(CHelloWorldBHO) | |
BEGIN_COM_MAP(CHelloWorldBHO) | |
COM_INTERFACE_ENTRY(IHelloWorldBHO) | |
COM_INTERFACE_ENTRY(IDispatch) | |
COM_INTERFACE_ENTRY(IObjectWithSite) | |
END_COM_MAP() | |
BEGIN_SINK_MAP(CHelloWorldBHO) | |
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete) | |
END_SINK_MAP() | |
// DWebBrowserEvents2 | |
void STDMETHODCALLTYPE OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL); | |
DECLARE_PROTECT_FINAL_CONSTRUCT() | |
HRESULT FinalConstruct() | |
{ | |
return S_OK; | |
} | |
void FinalRelease() | |
{ | |
} | |
public: | |
private: | |
CComPtr<IWebBrowser2> m_spWebBrowser; | |
BOOL m_fAdvised; | |
}; | |
OBJECT_ENTRY_AUTO(__uuidof(HelloWorldBHO), CHelloWorldBHO) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment