Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к ативному окну IE, Извлечь URL из IE 
:(
    Опции темы
jonimimoni
Дата 11.3.2011, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 10
Регистрация: 28.9.2007

Репутация: нет
Всего: нет



Доброго времени суток.
Прошу помощи в решении проблемы определения активного окна IExplorer и изъятия из него URLа.
ТЕХЗАДАНИЕ: 
 - программа свёрнута и реагирует на нажатие F12(использую хуки, эта часть работает);
 - дополнительно открыто n-ое число (5-20) окон IExplorer6 (без вкладок, одно окно - один URL), одно из них активно;
 - требуется по нажатию F12 получить доступ именно к !!!активному окну!!! и извлечь из него URL, после закрыть это окно, таким образом следующее становиться активным;
 - нажимать кнопку пока не закончатся окна IExplorer6;

Использовал готовую функцию:
Код

function Get_URL : string;
var
Cliente_DDE: TDDEClientConv;
temp: PChar;      //<<-------------------------This is new
begin
Result := '';
Cliente_DDE:= TDDEClientConv.Create( nil );
with Cliente_DDE do
begin
   SetLink( 'IExplore','WWW_GetWindowInfo');
   temp := RequestData('0xFFFFFFFF');
   Result := StrPas(temp);
   StrDispose(temp);  // <<-- Предотвращаем утечку памяти
   CloseLink;
end;
Cliente_DDE.Free;
end;

но когда открыто больше одного IExplore, данная функция перестаёт работать.
Интуитивно догадываюсь, что необходимо получать дескриптор\хендл или что ещё активного окна IExplore и с ним уже работать, но и функция будет другая и метод обработки.
Так же понимаю что ответ скрыт тут, но знаний моих не хватает чтобы это осилить.
В связи с вышесказанным прошу помощи в разъяснении или ссылками, а за готовый код буду очень признателен.
PM MAIL   Вверх
Rrader
  Дата 11.3.2011, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Цитата(jonimimoni @  11.3.2011,  17:21 Найти цитируемый пост)
требуется по нажатию F12 получить доступ именно к !!!активному окну!!! и извлечь из него URL

Попробуй GetForegroundWindow и проверь, что окно - действительно от IE (класс окна должен быть IEFrame). Зная хэндл, текст можно вытянуть через IAccessible


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
jonimimoni
Дата 12.3.2011, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 10
Регистрация: 28.9.2007

Репутация: нет
Всего: нет



Спасибо Rrader за Ваш ответ smile 
Цитата(Rrader)
Попробуй GetForegroundWindow и проверь, что окно - действительно от IE (класс окна должен быть IEFrame).
 сделал, работает... может быть бестолково и не правильно, но на практике работает так как надо, код ниже
Код

procedure GetURLActive;
var WND : HWND;
begin
   WND := FindWindow('IEFrame', nil);            // найти любое окно IE
   if WND <> 0 then                                         // если оно есть
     begin
       SetForegroundWindow(WND);                 // сделать его активным
            $$$
       PostMessage (WND, WM_CLOSE, 0, 0);   // закрыть активное окно IE
     end else showmessage('Окна кончились');
end;


Теперь вторая часть марлизонского балета, на месте $$$ должен быть код по вытягиванию URL, но...
Цитата(Rrader)
Зная хэндл, текст можно вытянуть через IAccessible 

с этим засада, поскольку при компиляции (там есть готовый проект, призванный помочь понять IAccessible) возникла ошибка, отсутствует OLEACC.DCU Скачать в инете не получилось smile 
Было принято решение не использовать IAccessible а погуглить-пояндексить-подркбить и всего 2 достойных варианта: первый изложен в первом посте, а вот второй
Код

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);
 оказался на деле НЕРАБОЧИМ... т.е. значение функции пустое, или отсутствует или ещё чего. (знаю, это разные значения)
В связи с этим просьба, помочь в написании фрагмента кода для получения URL из окошка с хендлом WND smile 
Заранее спасибо.

Это сообщение отредактировал(а) jonimimoni - 12.3.2011, 00:57
PM MAIL   Вверх
Rrader
  Дата 12.3.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Цитата(jonimimoni @  12.3.2011,  06:48 Найти цитируемый пост)
 сделал, работает... может быть бестолково и не правильно, но на практике работает так как надо, код ниже

Так ведь вопрос был в том, как получить активное окно, а не установить его?
Цитата(jonimimoni @  12.3.2011,  06:48 Найти цитируемый пост)
с этим засада, поскольку при компиляции (там есть готовый проект, призванный помочь понять IAccessible) возникла ошибка, отсутствует OLEACC.DCU Скачать в инете не получилось smile 

Прикрепил к посту

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  oleacc.zip 6,64 Kb


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1097 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.