BHO 개발 브 라 우 저 플러그 인 - Hello Word

ATL 프레임 워 크 를 이용 해 BHO 브 라 우 저 플러그 인 을 개발 하 는 인터넷 에는 많은 자료 가 있 는데 구체 적 인 과정 은 쓰 지 않 는 다.참고 자 료 는 다음 과 같다.
MSDN:https://msdn.microsoft.com/en-us/library/bb250489(v=vs.85).aspx
CSDN 블 로그:http://blog.csdn.net/feier7501/article/details/11266345
이 방법 으로 생 성 된 플러그 인 은 웹 페이지 를 열 때 여러 개의 Message Box 가 팝 업 되 며, OnDocumentComplete 를 여러 번 실행 합 니 다.
해결 결과 없 음 다음 글 검색:
《 진정한 DocumentComplete 》:http://blog.csdn.net/skyremember/article/details/2994168
그러나 코드 는 VB 와 MFC 의 것 이 고 수정 방법 은 다음 과 같다.
CHEllo WorldBHO 멤버 변수 추가:
함수 SetSite 수정 은 다음 과 같 습 니 다.
LPUNKNOWN m_lpUnknown;

OnDocumentComplete 함수 수정 은 다음 과 같 습 니 다.
STDMETHODIMP CHelloWorldBHO::SetSite(IUnknown* pUnkSite)  
{  
	if (pUnkSite != NULL)  
	{  
		// Cache the pointer to IWebBrowser2.  
		HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser);  
		if (SUCCEEDED(hr))  
		{  
			// Register to sink events from DWebBrowserEvents2.  
			hr = DispEventAdvise(m_spWebBrowser);  
			if (SUCCEEDED(hr))  
			{  
				m_fAdvised = TRUE;
				m_lpUnknown = pUnkSite;
			}  
		}  
	}  
	else  
	{  
		// Unregister event sink.  
		if (m_fAdvised)  
		{  
			DispEventUnadvise(m_spWebBrowser);  
			m_fAdvised = FALSE;
			m_lpUnknown= NULL;
		}  

		// Release cached pointers and other resources here.  
		m_spWebBrowser.Release();  
	}  

	// Call base class implementation.  
	return IObjectWithSiteImpl<CMKeyBHO>::SetSite(pUnkSite);  
}

이렇게 고 친 후에 웹 페이지 로 딩 이 완 료 될 때 만 대화 상 자 를 팝 업 할 수 있 습 니 다. 큰 성 과 를 거 두 었 습 니 다!

좋은 웹페이지 즐겨찾기