Also ich habe es so gelösst:
Delphi-Quellcode:
var
ValOut : OLEVariant;
Val : PSafeArray;
sBuffer: WideString;
i,
iMin,
iMax: integer;
begin
TVariantArg(ValOUT).VT := VT_ARRAY;
TVariantArg(ValOUT).ppArray :=
nil;
TargetCommando(2233,EmptyParam,ValOut);
TVariantArg(ValOut).VT := VT_ARRAY;
Val := PSafeArray(TVariantArg(ValOUT).ppArray);
// Die Anzahl der Elemente im Array bestimmen
ActiveX.SafeArrayGetLBound(Val, 1, iMin);
ActiveX.SafeArrayGetUBound(Val, 1, iMax);
// Die einzelnen Strings auslesen
for i := iMin
to iMax
do
begin
ActiveX.SafeArrayGetElement(Val, i, sBuffer);
end;
// Vorsicht, Leak...
ActiveX.SafeArrayDestroy(Val);
// Das Funktioniert noch nicht.....
Ach ja mein TargetCommando...
Delphi-Quellcode:
CONST
CGID_MSHTML : TGUID = '{DE4BA900-59CA-11CF-9592-444553540000}';
procedure TMainform.TargetCommando(IDM:integer;Valin:OleVariant;Var Valout:OleVariant);
var
Target : IOleCommandTarget;
PtrGUID : PGUID;
Doc : IHTMLDocument2;
begin
if Succeeded(pDisp.QueryInterface(IID_IWebBrowser2, wb2)) then
begin
Doc := wb2.Document as IHTMLDocument2;
Doc.QueryInterface(IID_IOleCommandTarget,Target);
New(PtrGUID);
PtrGUID^ := CGID_MSHTML;
Target.Exec(PtrGUID,IDM,0,Valin,Valout);
Target := NIL;
Dispose(PtrGUID);
end;
end;
Hoffe ich habe alles "richtig" umkopiert!
(Bei mir sieht es noch etwas anders aus, weil ich das auch in Frameseiten realisiert habe)
LG Frank