Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.17;
Скачать: CL | DM;

Вниз

Заголовок и URL Intrnet Explorer   Найти похожие ветки 

 
Mozgan   (2009-04-02 10:34) [0]

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

Нашел в инете две функции для получения заголовка и 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
Помогите пожалуйста, разобраться с данным кодом.


 
Rouse_ ©   (2009-04-02 10:52) [1]

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

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;


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2009.05.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
15-1234352551
Правильный$Вася
2009-02-11 14:42
2009.05.17
2 вопроса по установке D2009


2-1238824270
XTasy
2009-04-04 09:51
2009.05.17
StringGrid и событие OnMouseMove


15-1237194918
Cobalt
2009-03-16 12:15
2009.05.17
Работа со строками через asm - переносимость между версиями?


2-1238483163
AlexDan
2009-03-31 11:06
2009.05.17
Клик для кнопки


3-1220958466
BUM
2008-09-09 15:07
2009.05.17
Помогите с запросом