Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.08.2008, 08:52
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
Вопрос FindWindow?

1. Результат функции FindWindow() имеет тип - HWnd

2. ShellWindow := CoShellWindows.Create; - кол-во окон
for k := 0 to ShellWindow.Count do
begin
.....
end;

Можно как либо связать результат функции FindWindow c переменной k, чтобы не перебирать все окна??? k:= ...(FindWindow(nil,'Заголовок окна')).
Ответить с цитированием
  #2  
Старый 05.08.2008, 10:00
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Я так и не понял, что ты имеешь в виду связать результат с переменной.
По сути тип HWnd тоже самое что и DWord.
Функция FindWindow() - возвращает дескриптор окна, т.е. что-то вроде уникального идентификационного номера, или 0 если окно с заданными параметрами не найдено.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #3  
Старый 05.08.2008, 10:43
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Использую этот код для выдергивания 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  
Старый 05.08.2008, 10:47
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Т.е избежать полного перебора окон. C помощью FindWindow найти дескриптро нужного мне окнаи каким-нибудь образом обойтись без цикла в имеющимся у меня коде....
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:24.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025