Einzelnen Beitrag anzeigen

Bladefire

Registriert seit: 30. Jun 2014
67 Beiträge
 
#1

TWebBrowser(.UserAgent) - User Agent ändern

  Alt 9. Jul 2014, 17:42
Hallo,

Ich möchte den User Agent vom TWebBrowser ändern. Dazu habe ich im Internet diese Webseite gefunden. Jedoch verstehe ich den Code (überhaupt) nicht.

Ich werde jetzt Schritt für Schritt schreiben wie ich vorgegangen bin. Ich bitte euch mir anschließend mittzuteilen was ich falsch gemacht habe.

Falls jemand die Zeit hat mir zu erklären was dieser Code genau macht ist dies ebenfalls gerne gesehen.

Schritt 1:

Ich füge die Konstante vor Type in einem VCL Formular ein
Code:
const
  DISPID_AMBIENT_USERAGENT = -5513;
(Hier fängt es schon an, keine ahnung was das macht)

Schritt 2:

Ich füge nach
Code:
type
und
Code:
TForm4 = class(TForm)
Code:
TWebBrowser = class (SHDocVw.TWebbrowser, IDispatch)
ein.

Schritt 3:

Ich füge (ersetze)
Code:
  private
    FUserAgent: string;
    procedure SetUserAgent (const Value: string);
    function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT; stdcall;
  public
    property UserAgent: string read FUserAgent write SetUserAgent;
    constructor Create(AOwner: TComponent); override;
  end;
ein.

Schritt 4:
nach
Code:
implementation

{$R *.dfm}
Füge ich diesen Abschnitt ein:

Code:
constructor TWebBrowser.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FUserAgent:='';
end;
 
function TWebBrowser.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT;
begin
  //check if the DISPID_AMBIENT_USERAGENT flag is being processed and if the User Agent to set is not empty
  if (FUserAgent <> '') and (Flags and DISPATCH_PROPERTYGET <> 0) and Assigned(VarResult) and (DispId=DISPID_AMBIENT_USERAGENT) then
  begin
    //set the user agent
    POleVariant(VarResult)^:= FUserAgent+#13#10;
    Result := S_OK; //return S_OK
  end
  else
  Result := inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr); //call the default Invoke method
end;
 
procedure TWebBrowser.SetUserAgent(const Value: string);
var
  Control: IOleControl;
begin
  FUserAgent := Value;
  //the current interface supports IOleControl?
  if DefaultInterface.QueryInterface(IOleControl, Control) = 0 then
    Control.OnAmbientPropertyChange(DISPID_AMBIENT_USERAGENT); //call the OnAmbientPropertyChange event
end;
Was habe ich alles Falsch gemacht?

Danke schonmal für eure hilfe

Lg Simon
  Mit Zitat antworten Zitat