2016-05-13 8 views
0

ich versuche, URL einer Seite zu ergreifen, die meine activex läuft, ich DDEMAN Einheit verwendet, aber seine scheint nicht in activex hier nicht funktioniert, was ichWie bekomme ich eine URL von ie mit activex?

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; 

nach dem Ausführen des Codes dessen, dass GET_URL scheint getan haben Funktion Rückgabe leeres Ergebnis in ActiveX. Ich habe diesen Code auf exe getestet und es funktioniert normal. Was könnte das Problem sein? Wie bekomme ich eine URL, die im IE mit ActiveX läuft?

als remy schlug ich

versucht
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; 

konnte aber den Code in dieser Zeile memo1.Lines.Add(getsite as IWebBrowser2.LocationURL);

Compiler Fehler behoben

ist dies eine gute Möglichkeit, nicht kompiliert oder vielleicht könnte ich es besser machen?

+0

Verwenden TWebBrowser Schnittstelle statt DDE. – MartynA

+0

Entschuldigung, aber wie kann ich den Twebbrowser verwenden, um IE Adresse URL zu bekommen? – DelphiStudent

+0

@MartynA: 'TWebBrowser' ist ein Komponenten-Wrapper um einen eingebetteten Webbrowser. In diesem Fall befindet sich der Code in einem ActiveX-Steuerelement, das in einer IE-Browserinstanz ausgeführt wird. Als solches kann es die DOM-Schnittstellen des IE verwenden, um auf die Browser-Instanz zuzugreifen, die es geladen hat. –

Antwort

1

Die Methode IOleObject.SetClientSite() Ihres ActiveX-Steuerelements empfängt die IClientSite-Schnittstelle des Browsers, mit der Sie die URL der HTML-Seite abrufen können, die Ihr ActiveX-Steuerelement geladen hat. Je nach Ihrer Version von Internet Explorer gibt es zwei verschiedene Möglichkeiten.

  1. Abfrage der IClientSite für IServiceProvider, dann IServiceProvider.QueryService() rufen eine IWebBrowser2 zu bekommen, dann können Sie die IWebBrowser2.LocationURL Eigenschaft lesen.

  2. Fragen Sie die IClientSite für IHTMLDocument2, dann lesen Sie die IHTMLDocument2.URL Eigenschaft.

Siehe folgende MSN Artikel Weitere Informationen:

Accessing the Object Model from Within an ActiveX Control

+0

Ich versuche anzuwenden, was Sie vorgeschlagen haben. Ich aktualisiere den Code in meiner Frage – DelphiStudent

+0

Das Problem, das Sie beschreiben, um einen Compilerfehler zu erhalten, stimmt nicht mit dem Code überein, den Sie für 'Button1Click()' angezeigt haben. Was ist der eigentliche Fehler? Hast du auch den 2. Ansatz ausprobiert, den ich oben erwähnt habe? Vielleicht möchten Sie das trotzdem tun, da dies die URL des Dokuments, auf dem sich Ihr ActiveX befindet, und nicht die URL, die der Browser anzeigt, zurückgibt, die sich zum Beispiel bei HTML-Frames unterscheiden kann. –

+0

Fehler ist schon meine schlechte Ich sollte pwb2.LocationURL statt IWebBrowser2.LocationURL lesen, auch ich werde versuchen, die zweite Ansatz auch vielen Dank – DelphiStudent

Verwandte Themen