Использую этот код для выдергивания html-кода странички(работает) -
Код:
//--- Функция считивания html-кода в TMemo...
function GetHTMLCode(WB: IWebbrowser2; ACode: TStrings): Boolean;
var
//вытягивает код страницы в tstrings
ps: IPersistStreamInit;
s: string;
ss: TStringStream;
sa: IStream;
begin
ps := WB.document as IPersistStreamInit;
ss := TStringStream.Create(s);
try
sa:= TStreamAdapter.Create(ss, soReference) as IStream;
Result := Succeeded(ps.Save(sa, Bool(True)));
if Result then ACode.Add(ss.Datastring);
finally
ss.Free;
end;
end;
......
ShellWindow := CoShellWindows.Create;
// получаем запущенный экземпляр Internet Explorer
// для этого пробегаемся по всем окнам системы
for k := 0 to ShellWindow.Count do
begin{1}
spDisp := ShellWindow.Item(k);
if spDisp = nil then Continue;
//QueryInterface определяет, может ли интерфейс использоваться с объектом
// проверяем , а не Браузер ли это :
spDisp.QueryInterface(iWebBrowser2, WB);
if WB <> nil then
begin{2}
// проверяем , а не HTML ли это :)
WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
if iDoc1 <> nil then // если да, то выдергиваем html код
begin{3}
// связываем запущенный экземпляр Internet Explorera как браузер
WB := ShellWindow.Item(k) as IWebbrowser2;
begin{4}
Form1.RichEdit1.Clear;//Отчистка RichEdit1
GetHTMLCode(WB, RichEdit1.Lines);// Пишем html код в RichEdit
....
end;
end;
end;
end;
Если сделать вот так :
k:=FindWindow(nil,'Заголовок окна');
WB := ShellWindow.Item(k) as IWebbrowser2;
GetHTMLCode(WB, RichEdit1.Lines);
То компиляция проходит, но при выполнении проги выдает ошибку.