Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2011, 16:47   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Слежение за открытием Internet Explorer

Добрый день! Вообщем, ситуация такая. Результатом отработки некой сторонней программы является запуск в отдельных окнах Internet Explorer (IE), в которых отображается некий текст. Мне нужно как-то отслеживать эти запуски, загружать содержимое открываемой странички в IE и грузить его в RichEdit, а затем закрывать окно IE, из которого был взят исходный текст странички. Подскажите как это можно реализовать и в какую, чем, сторону копать? Заранее спасибо за ответы по сабжу.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.06.2011, 17:24   #2
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

в таймере проверяй список процессов, если появился iexplorer.exe значит запустился IE, потом из адресной строки вытаскиваешь url и загружаешь содержимое тем же IdHTTP1.Get()
ну с закрытием IE думаю трудности не будет
fate вне форума Ответить с цитированием
Старый 30.06.2011, 17:29   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Если б так просто было. А если пользователь откроет обычную страничку, чтобы посмотреть, например, информацию на внутреннем сайте организации? Тогда что? Мне не надо грузить ее содержимое. Если есть у кого пример такого слежения, то подкиньте пожалуйста, буду очень признателен.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.06.2011, 17:31   #4
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

ну тогда проверяй дополнительно по заголовку окна.
Заголовок окна = тексту в теге title
если открыта не твоя страничка, выходишь из процедуры
fate вне форума Ответить с цитированием
Старый 30.06.2011, 17:35   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Можешь помочь примером для начала? Я с инди не работал раньше.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.06.2011, 17:38   #6
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

чуть позже

а ты знаешь какой url будет открываться? нужно его вытаскивать из IE?

вот на примере яндекса
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls,Tlhelp32, StdCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP, ComCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Edit1: TEdit;
    RichEdit1: TRichEdit;
    IdHTTP1: TIdHTTP;
    procedure Timer1Timer(Sender: TObject);
    function ProcExists(const ProcName:string):boolean;
    function findNex(hd: hwnd; Classname: string): hwnd;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function TForm1.findNex(hd: hwnd; Classname: string): hwnd;
var tmp:hwnd; str:array[0..255]of char;
begin
result:=0;
fillchar(str,sizeof(str),#0);
tmp:=GetWindow(hd, gw_child);
while tmp <> 0 do begin
GetClassName(tmp,str,sizeof(str));
if str=Classname then begin result:=tmp; exit; end;
  result:=findNex(tmp,Classname);
if result<>0 then break;

tmp:=GetWindow(tmp, GW_HWNDNEXT);
end;

end;

function TForm1.ProcExists(const ProcName: string): boolean;
const
  PROCESS_TERMINATE=$0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  result := false;
  FSnapshotHandle := CreateToolhelp32Snapshot
  (TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,
  FProcessEntry32);

  while integer(ContinueLoop) <> 0 do
  begin
  //memo1.Lines.Add(FProcessEntry32.szExeFile);
    if UpperCase(FProcessEntry32.szExeFile)=UpperCase(ProcName) then begin
     result:=true;
     break;
     end;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;

  CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var hw,subhw:HWND;
str:array[0..255]of char;
begin
if ProcExists('iexplore.exe') then begin   //если найден процесс
 hw:=FindWindow('IEFrame',nil);
 if hw<>0 then
  subhw:=findNex(hw,'Edit');  //находим поле ввода адресной строки
     if subhw<>0 then begin
      ZeroMemory(@str,sizeof(str));
       SendMessage(subhw,WM_GETTEXT,sizeof(str),Lparam(@str[0]));
      edit1.Text:=str;
       if pos('yandex',str)>0 then begin //если юзер открыл яндекс
        RichEdit1.Text:=IdHTTP1.Get(str);
        SendMessage(hw,wm_Close,0,0);
        end;
     end;  //if subhw<>0 then
end; //if

end;

end.

Последний раз редактировалось artemavd; 02.07.2011 в 08:47.
fate вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слежение за открытием файлов Towlier Помощь студентам 1 24.04.2011 00:13
Internet Explorer (IICuX) Win Api 4 28.04.2010 13:06
Internet Explorer StartMis Работа с сетью в Delphi 0 01.03.2010 01:56
Internet Explorer DeDoK Общие вопросы Delphi 1 14.06.2008 14:31
Internet Explorer 7.0 Аlex Win Api 12 09.09.2007 09:45