如何正确地从使用activex获取网址?

时间:2016-05-13 11:07:56

标签: delphi delphi-xe7

我正在尝试抓取运行我的activex的网页的网址,我使用Exit Do单位,但它似乎在activex中不起作用我在这里做了

DDEMAN

运行代码之后,似乎GET_URL函数在function Get_URL(Servicio: string): String; var Cliente_DDE: TDDEClientConv; S: String; begin Result := ''; Cliente_DDE := TDDEClientConv.Create(nil); with Cliente_DDE do begin SetLink(Servicio, 'WWW_GetWindowInfo'); S := RequestData('0xFFFFFFFF'); Result := S; form1.memo1.Lines.Add(Result); CloseLink; end; Cliente_DDE.Free; end; procedure TForm1.Button1Click(Sender: TObject); var URI: TIdURI; LinK : String; Temp: string; Host,sExt: String; Path : string; begin Link := Get_URL('Iexplore'); Temp := Copy(Link, 1, Pos(',', Link) - 1); Temp := StringReplace(Temp, '"', '', [rfReplaceAll]); URI := TIdURI.Create(Temp); try Host := URI.Host; Path := URI.Path; Host := StringReplace(Host ,'www.', '',[rfReplaceAll,rfIgnoreCase]); sExt := ExtractFileExt(Host); Host := Copy(Host, 1, Length(Host) - Length(sExt)); finally URI.Free; end; end; 中返回空结果。我在exe上测试了这段代码及其工作正常。可能是什么问题呢 ?如何正确获取在IE中使用ActiveX运行的URL?

如雷米建议我试过

ActiveX

但无法在此行编译代码procedure Tactiveform.Button1Click(Sender: TObject); var punk: IUnknown; poo: IOleObject; pcs: IOleClientSite; psp: IServiceProvider; pwb2: IWebBrowser2; pvDoc: Variant; pvElems: Variant; pvElem: Variant; i: Integer; Getsite : string; begin punk:=Self.ComObject as IUnKnown; if punk.QueryInterface(IOleObject, poo) = S_OK then begin // Get the client site if poo.GetClientSite(pcs) = S_OK then begin // Have the site, now try to get the Service provider if pcs.QueryInterface(IServiceProvider, psp) = S_OK then begin // Query for WebBrowser2 if psp.QueryService(IWebBrowserApp, IWebBrowser2, pwb2) = S_OK then begin memo1.Lines.Add(pwb2.LocationURL); end else memo1.Lines.Add('Didnt get the web browser'); end else memo1.Lines.Add('No service provider'); end else memo1.Lines.Add('No ole client site'); end else memo1.Lines.Add('No ole object'); end;

编译器错误已修复

这是好方法还是我可以做得更好?

1 个答案:

答案 0 :(得分:1)

您的ActiveX控件的IOleObject.SetClientSite()方法将接收浏览器的IClientSite接口,您可以使用该接口检索已加载ActiveX控件的HTML页面的URL。根据您的Internet Explorer版本,有两种不同的方法。

  1. 查询IClientSite IServiceProvider,然后致电IServiceProvider.QueryService()获取IWebBrowser2,然后您就可以阅读IWebBrowser2.LocationURL媒体资源。

  2. 查询IClientSite IHTMLDocument2,然后阅读IHTMLDocument2.URL媒体资源。

  3. 有关详细信息,请参阅以下MSN文章:

    Accessing the Object Model from Within an ActiveX Control