![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Заголовок и 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;