2009-06-07 4 views
0

내 응용 프로그램에서 새 IE 창을 열고받은 다음 처리합니다. DocumentCompleteNavigateComplete2 열린 새 IE에서 이벤트가 발생했습니다. XP에서는 모든 것이 잘 작동합니다. Vista에서는 새로운 IE가 보호 모드에서 실행되므로 내 앱이 IE에서 DocumentCompelte 이벤트를 수신 할 수 없습니다.ChangeWindowMessageFilter를 사용하여 보호 모드 IE에서 DocumentComplete 이벤트를받을 수 있습니까?

보호 모드에서 열린 IE처럼 보안 수준을 변경하거나 앱 무결성을 낮추고 싶지 않습니다. 나는 ChangeWindowsMessageFilter를 사용하여 보호 모드 IE에서 DocumentComplete 및 NavigateComplete2 이벤트를받을 수 있는지 궁금합니다. 내 코드는 다음과 같습니다.

ChangeWindowMessageFilter(DISPID_DOCUMENTCOMPELTE, MSGFLT_ADD); 
    ChangeWindowMessageFilter(DISPID_NAVIGATECOMPLETE2, MSGFLT_ADD); 

감사합니다.

답변

1

번호 ChangeWindowMessageFilter()는 창 메시지 (예 : WM_CREATE)에서만 작동합니다.

DWebBrowserEvents2() "메시지"는 COM을 통해 호출되는 Dispinterface 이벤트이며 창 메시지와 관련이 없습니다.

편집 : documentation에서

:

응용 프로그램이 인터넷 Explorer를 사용하면 IE가 시작된 후 바로 네비게이션을 제어 계속할 필요가 를 CoCreateInstance를 사용하여 실행하는 경우, 은 이동 IWebBrowser2을 사용할 수 있습니다 프로그래밍 방식으로 Internet Explorer. IE 프로세스와 동일한 무결성 레벨이 인 경우 IE가 시작된 후에 만 ​​ 탐색을 계속 제어 할 수 있습니다. 애플리케이션 이 다른 무결성 IE 프로세스에서 URL로 이동하면 추가 탐색을 수행 할 수 없습니다. 은 탐색 후에 IE 프레임을 표시해야합니다.

그래서 나는 비슷한 문제로 희생되고 있다고 생각합니다. 낮은 무결성 프로세스로 프로세스를 실행하거나 더 높은 무결성 레벨로 웹 브라우저를 실행해야합니다. 앱을 실행하는 방법 (매니페스트)을 제어하는 ​​방법에 대한 자세한 내용은 document을 참조하십시오.

실제로 전체 브라우저가 필요하지 않은 경우 CoCreateInstance(CLSID_WebBrowser)을 고려하십시오.

+0

Vista에서 차단 된 Dispinterface 이벤트를 여는 방법이 있습니까? 감사! – bionicoder

+0

귀하의 질문이 의미가 없기 때문에 귀하가 올바른 질문을하고 있다고 생각하지 않습니다. 처음에는 어떻게 이벤트에 가입하고 있습니까? –

+0

제 질문은 의미가 있습니다. 여기에 이벤트 구독 방법이 나와 있습니다. hr = pNewBrowserEvtHandlerObj-> DispEventAdvise (m_spNewWebBrowser2); UAC가 켜져 있어도 반환 시간은 S_OK이므로 구독하는 것이 좋습니다. UAC가 꺼져 있거나 관리자로 앱을 실행하고 있다면 모든 것이 정상입니다. – bionicoder