![]() |
|
#1
|
|||
|
|||
![]() 1. Результат функции FindWindow() имеет тип - HWnd
2. ShellWindow := CoShellWindows.Create; - кол-во окон for k := 0 to ShellWindow.Count do begin ..... end; Можно как либо связать результат функции FindWindow c переменной k, чтобы не перебирать все окна??? k:= ...(FindWindow(nil,'Заголовок окна')). |
#2
|
||||
|
||||
![]() Я так и не понял, что ты имеешь в виду связать результат с переменной.
По сути тип HWnd тоже самое что и DWord. Функция FindWindow() - возвращает дескриптор окна, т.е. что-то вроде уникального идентификационного номера, или 0 если окно с заданными параметрами не найдено. Хорошо написанная программа не требует документации ICQ 9-184-668. |
#3
|
|||
|
|||
![]() Использую этот код для выдергивания 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); То компиляция проходит, но при выполнении проги выдает ошибку. |
#4
|
|||
|
|||
![]() Т.е избежать полного перебора окон. C помощью FindWindow найти дескриптро нужного мне окнаи каким-нибудь образом обойтись без цикла в имеющимся у меня коде....
|