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

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

URL браузера...конкретно IE [D7, WinXP]


Ghost. ©   (2002-11-29 15:10:00) 

Функция указанная в ФАКе при вызове из него самого не работает..какие могут быть еще варианты..


Ghost.   (2002-12-02 14:29:00) [1]

Спасибо всем за участие...


Ghost.   (2002-12-02 14:25:00) [2]


> Opuhshii ©

Работает...


Song   (2002-12-02 14:03:00) [3]

special for Ghost. © (02.12.02 13:16)
пришлось потратить 10 минут драгоценного времени :)

procedure TForm1.Button1Click(Sender: TObject);
Var Wnd:HWND;
Arr:array [1..255] of Char;
begin
ShellExecute(Handle,nil,"iexplore.exe"," http://delphi.mastak.ru",nil,SW_SHOWNORMAL);
Sleep(8000); // ждём пока страница загрузится (т.е. пока адрес появится в окне ComboBoxEx32). В течении этого времени переключаться с IE нельзя, иначе GetForeGroundWindow вернёт не тот дискриптор и соответственно вся очередь чайлдов будет неправильной.
Wnd:=FindWindowEx(GetForeGroundWindow,0,"WorkerA",nil);
Wnd:=FindWindowEx(Wnd,0,"ReBarWindow32",nil);
Wnd:=FindWindowEx(Wnd,0,"ComboBoxEx32",nil);
SendMessage(Wnd,WM_GETTEXT,SizeOf(Arr),Integer(@Arr));
ShowMessage(TrimRight(Arr));
end;


Opuhshii   (2002-12-02 13:34:00) [4]

>SW:=CoShellWindows.Create;
uses SHDOCvw
можно написать CoCreateInstance и описать нужный тебе guid(соответственно описан в SHDOCvw) и модуль не использовать,...


Ghost.   (2002-12-02 13:16:00) [5]


> CoShellWindows

А это, что такое?
я нашел вариант..
{-------------------------------------------------------}
Function GetText(WindowHandle: hwnd):string;
var
txtLength : integer;
buffer: string;
begin

TxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0);
txtlength := txtlength + 1;
setlength (buffer, txtlength);
sendmessage (WindowHandle,wm_gettext, txtlength, longint(@buffer[1]));
result := buffer;
end;

function GetURL:string;
var
ie,toolbar,combo,
comboboxex,edit,
worker,toolbarwindow:hwnd;
begin

ie := FindWindow(pchar("IEFrame"),nil);
worker := FindWindowEx(ie,0,"WorkerA",nil);
toolbar := FindWindowEx(worker,0,"rebarwindow32",nil);
comboboxex := FindWindowEx(toolbar, 0, "comboboxex32", nil);
combo := FindWindowEx(comboboxex,0,"ComboBox",nil);
edit := FindWindowEx(combo,0,"Edit",nil);
toolbarwindow := FindWindowEx(comboboxex, 0, "toolbarwindow32", nil);


result := GetText(edit);
{-------------------------------------------------------}

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(GetURL);
end;
но тоже чета не получается..


Song   (2002-12-02 13:12:00) [6]

2Ghost. © (02.12.02 11:46)
WM_GETTEXT (или сообщения CB_*) надо посылать на окно, содержащее урл в браузере. Это окно имеет класс ComboBoxEx32.

Нижеизложенная иерархия объектов справедлива для IE 5:

IEFrame
|
|-WorkerA
| |
|-ReBarWindow32
| |
|-ComboBoxEx32
|

Нужно нам окно последнее. Вот на него мы должны послать сообщение и получить строку.


Opuhshii   (2002-12-02 13:02:00) [7]

вот так тоже можно...
var
I:Integer;
SW:Variant;
begin
SW:=CoShellWindows.Create;
for I:=1 to SW.Count-1 do begin
Showmessage(SW.Item(I).LocationURL);
end;
end;


Ghost.   (2002-12-02 12:12:00) [8]

Всем спасибо сам нашел...


Ghost.   (2002-12-02 11:46:00) [9]

Вот видимо это именно то что мне нужно..но я не хотел бы показаться назойливым..но с API у меня не очень дружественные отношения...
Не будет ли любезен многоуважаемый ДЖИН(читай Song © )привести какойнибудь вариант вызова этой функции..


Song   (2002-12-02 09:21:00) [10]

WM_GETTEXT


Ghost.   (2002-12-02 09:06:00) [11]

Мне казалось, что я понятно обьяснил но если нет (
> Ihor Osov"yak ©
) звиняйте
В FAQ (этого сайта )есть
Как получить активный URL из браузера.

Приводимая здесь функция показывает, как Ваше приложение может извлечь из браузера (IE или Netscape) URL , как, например, это делает аська.
Совместимость: Delphi 4.x (или выше)
Не забудьте добавить DDEMan в Ваш проект!

Собственно сам исходничек функции:

uses windows, ddeman, ...... function Get_URL(Servicio: string): String; var Cliente_DDE: TDDEClientConv; temp:PChar; //<<-------------------------This is new begin Result := ""; Cliente_DDE:= TDDEClientConv.Create( nil ); with Cliente_DDE do begin SetLink( Servicio,"WWW_GetWindowInfo"); temp := RequestData("0xFFFFFFFF"); Result := StrPas(temp); StrDispose(temp); //<<-Предотвращаем утечку памяти CloseLink; end; Cliente_DDE.Free; end; procedure TForm1.Button1Click(Sender); begin showmessage(Get_URL("Netscape")); или showmessage(Get_URL("IExplore")); end;


Автор: Ruslan Abu Zant (delphi3000@opilki.net)
Источник: http://www.sources.ru/delphi/
так вот если запустить его из своей программы то все работает.., а если запустить из DLL плагина для IE (Интернет Эксплоера для Ihor Osov"yak © ) такой же дополнительной панельки типа Яндекс бар (кто невидел помочь не могу Ihor Osov"yak © ) вот эта функция возвращает пустую строку..хотелось бы найти какой нибудь способ получения содержания адресной строки IE


Ihor Osov'yak   (2002-11-30 11:44:00) [12]

2 Ghost. © (29.11.02 15:10)

А, че(с Ghost), бля (с Кучма), влом сказать какая функция и че за фича такая "него самого" - ФАК? IE?. И шо такое не работает? На взлет не идет? Или на посадку?

Или здесь все телетапы?


Ghost.   (2002-11-30 11:29:00) [13]

И че вообще никто не знает? Или хотябы информацию как с браузером работать как с ОЛЕ обьектом..или еще как нибудь? Или га API заголовок окна известен..хендл тоже..какие-то варианты должны быть


Наверх

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