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
und
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