我正在尝试抓取运行我的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;
编译器错误已修复
这是好方法还是我可以做得更好?
答案 0 :(得分:1)
您的ActiveX控件的IOleObject.SetClientSite()
方法将接收浏览器的IClientSite
接口,您可以使用该接口检索已加载ActiveX控件的HTML页面的URL。根据您的Internet Explorer版本,有两种不同的方法。
查询IClientSite
IServiceProvider
,然后致电IServiceProvider.QueryService()
获取IWebBrowser2
,然后您就可以阅读IWebBrowser2.LocationURL
媒体资源。
查询IClientSite
IHTMLDocument2
,然后阅读IHTMLDocument2.URL
媒体资源。
有关详细信息,请参阅以下MSN文章: