Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Заголовок и URL Intrnet Explorer [D7, XP]


Mozgan ©   (2009-04-02 10:34:00) 

Доброго времени суток!

Нашел в инете две функции для получения заголовка и url из активного окна обозревателя.
Привожу исходники обоих функций.


function GetURL_IE: string;
var
 hIeWindow, hWorkerA, hToolbar, hComboBoxEx,
 hComboBox, hEdit: hWnd;
 Buf: array[0..255] of Char;
begin
 hIeWindow := FindWindow('IEFrame', nil);
 if hIeWindow <> 0 then begin
   hWorkerA := FindWindowEx(hIeWindow, 0, 'WorkerA', nil);
   hToolbar := FindWindowEx(hWorkerA, 0, 'RebarWindow32', nil);
   hComboBoxEx := FindWindowEx(hToolbar, 0, 'ComboBoxex32', nil);
   hComboBox := FindWindowEx(hComboBoxEx, 0, 'ComboBox', nil);
   hEdit := FindWindowEx(hComboBox, 0, 'Edit', nil);
   Sendmessage (hEdit, WM_GETTEXT, Length(Buf), Longint(@Buf));
   Result := String(Buf);
 end
 else
   Result := '';
end;

function GetCaption_IE: string;
var
 hIeWindow: hWnd;
 Buffer: array[0..255] of Char;
begin
 hIeWindow := FindWindow('IEFrame', nil);
 if hIeWindow <> 0  then begin
   Sendmessage (hIeWindow, WM_GETTEXT, Length(Buffer), Longint(@Buffer));
   Result := String(Buffer);
 end
 else
   Result := 'application close';
end;


В результате эксперимент показал, что удовлетворительно работает только функция GetCaption_IE
Помогите пожалуйста, разобраться с данным кодом.


Mozgan   (2009-04-02 10:57:00) [1]

Больщое спасибо за помощь!

Код правда сложнее, но реализация просто супер!
Спасибо, Rouse!


Rouse_   (2009-04-02 10:52:00) [2]

Путь активного окна браузера можно получить вот так:

uses
 SHDocVw;

function ParceURLName(const Value: String): String;
const
 scFilePath: array [0..7] of Char = ('f', 'i', 'l', 'e', ':', '/', '/', '/');
begin
 if CompareMem(@scFilePath[0], @Value[1], 8) then
 begin
   Result := Copy(Value, 9, Length(Value));
   Result := StringReplace(Result, '/', '\', [rfReplaceAll]);
   Result := StringReplace(Result, '%20', ' ', [rfReplaceAll]);
 end
 else
   Result := Value;
end;

function GetBrowserPath(TID: DWORD): String;
var
 iShellWindow: IShellWindows;
 iWB: IWebBrowserApp;
 spDisp: IDispatch;
 I: Integer;
begin
 Result := '';
 iShellWindow := CoShellWindows.Create;
 for I := 0 to iShellWindow.Count - 1 do
 begin
   spDisp := iShellWindow.Item(I);
   if spDisp = nil then Continue;
   spDisp.QueryInterface(IWebBrowserApp, iWB);
   if iWB <> nil then
     if GetWindowThreadProcessId(iWB.HWND) = TID then
     begin
       Result := ParceURLName(iWB.LocationURL);
       Break;
     end;
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Memo1.Lines.Add(GetBrowserPath(
   GetWindowThreadProcessId(GetForegroundWindow)));
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо