얼마전 델파이로 만들었던 코드입니다. 참고하세요.
function GetBrowserInterface(AXForm: TActiveForm): IWebBrowserApp;
var
pvSvcProvider: IServiceProvider;
pvBrowserApp: IWebBrowserApp;
function GetBrowser(punk: IUnknown; out pvBrowser: IWebBrowserApp): HResult;
begin
if Assigned(punk) then
begin
Result := punk.QueryInterface(IServiceProvider, pvSvcProvider);
if (Result = S_OK) then
begin
try
Result := pvSvcProvider.QueryService(IWebBrowserApp, IWebBrowserApp, pvBrowser);
finally
pvSvcProvider := nil;
end;
end;
end
else
Result := E_NOINTERFACE;
end;
begin
if Assigned(AXForm.ActiveFormControl) and (GetBrowser(AXForm.ActiveFormControl.ClientSite, pvBrowserApp) = S_OK) then
begin
try
Result := pvBrowserApp;
finally
pvBrowserApp := nil;
end;
end
else
Result := nil;
end;
강대민 님이 쓰신 글 :
: 웹페이지에 들어가는 엑티브엑스를 만들고있습니다
:
: 자신이 포함된 페이지의 자바스크립트를 호출하여 웹페이지와 상호 작용을하고싶은대
:
: 부모 IE의 객채를 구할수없어서 난감합니다 여기 저기 자료도보고
:
: execScript 팁도보고했는대 하나는 자기자신이 가지고있는 웹프라우저를 실행시키는것이고
:
: 하나는 TShellWindows 클레스를 사용해 모든 IE컨트롤 을 대상으로하여 주소로 필터링해서
:
: 스크립터를 실행하는 팁이더군요.. 저같은경우에는 자신을 실행시킨 부모가 누군지 몰라서
:
: 주소로 필터링할수도없고.. 난감합니다 GetParent 를통해 얻은 핸들을
:
: ShellWindows->Item(i)->HWND 와 매치시켜도 실수를한건지 매치가 안되내요..
:
: GetParent 를통해 얻은 핸들을 GetClassName함수로 얻어서 출력해보면
:
: "Internet Explorer_Server" 이렇게 나옵니다.. 핸들은 바로 얻는것이 맞는듯도 하구요
:
: 고수님들의 답변두탁드립니다.. 프로그래밍은 나름오래했는대 어느덧 변한 프로그래밍 스타일에
:
: 적응이 안됩니다 ^^;;
:
: 요점은 - > 엑티브엑스 컨트롤에서 자기 자신을 표시하고있는 IE의 도큐먼트를 얻고 싶습니다
:
:
:
:
: //--
:
: 질문드리고 조금후에 Internet Explorer_Server 의 페런트를 또얻고 그 페런트를 또얻고하는방식으로
:
: IEFrame(클레스명) 의 핸들을 취득하고 ShellWindows->Item(i)->HWND 와 비교해서
:
: 매치시킨후 팁에서 나온것처럼해서 자바스크립터 호출하는 처리를 완성했습니다..
:
: 이런방법은 다소 무리가 따르는느낌이고.. 객채를 잘이용해서 호출할수있는 방법이 있을터인대
:
: 고수님들의 조언부탁드립니다 ^^