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

Вниз

Получить текст под мышкой из чужого окна   Найти похожие ветки 

 
Очень Злой   (2012-11-03 13:57) [0]

программа должна получать текст из чужого окна (в моем случае это браузер (IE или Firefox)).

Пока реализовал это с помощью буфера обмена. Т.е. пользователь выделяет нужный текст и жмет ctrl+c, а программа отслеживает изменения в буфере обмена...
Но проблема в том, что пользователь может неправильно выделить текст (например выделить часть нужного текста, или же захватить часть ненужного).
Можно ли другим способом получить этот текст?
Т.е. нужна возможность получения текста, наодящегося в чужом окне в районе положения мышки, так, чтобы моя программа потом сама могла взять нужное ей кол-во символов из текста до положения мышки и после...
Реально ли такое сделать?
Если да - подскажите куда копать.


 
MBo ©   (2012-11-03 14:55) [1]

посмотри в сторону IAccessible


 
Очень Злой   (2012-11-03 15:31) [2]

Вроде как оно... По крайней мере заработало...

Спасибо за подсказку.


 
Очень Злой   (2012-11-04 16:04) [3]

Вобщем то, что первоначально отелось сделать - работает.
Т.е. с помощью такого кода

GetCursorPos(curpos)
...
if (SUCCEEDED(AccessibleObjectFromPoint(curpos, acc, vChild))) then
   try
     ...
     acc.get_accName(vChild, oName);
     ...
  finally
     VarClear(vChild);
     acc := nil;
   end;
   ...


я получаю строку текста под мышкой

Но
1. Можно ли, и если да то как мне получить другие строки текста, находящиеся рядом с той, где находится курсор мыши?

например в браузере открыт html-документ, который отображается как:


бла-бла-бла
...
Имеется 4 варианта:
a. Вариант 1
b. Вариант 2
c. Вариант 3
d. Вариант 4

...
бла-бла-бла


Наводя курсор на каждую из интересующих меня строчек, я получаю ее текст в своей программе.  Но хотелось бы наведя курсор мыши на первую (или на любую) строку интересующей меня части - получить все (в данном случае 5) строк. Проанализировать получаемую информацию, чтобы выбрать именно требуемые 5 строк и не лезть дальше - это не проблема, но как их получить?
Получать это все путем нескольких запросов интерфейса IAccessible, подставляя каждый раз модифицированное значение переменной curpos (TPoint) ИМХО сильно извращенский метод, да и к тому же все равно он почти ничего не даст (так как шрифт может быть разный в браузере, текст может быть длинным и в окне браузера размещаться на нескольких строчках).
Разве что получивши название объекта под курсором (в данном случае это и есть нужный текст), найти "родительский" объект и перебрать всех его "детей" в поисках нужных. Можно ли так сделать? А то что ни пробую - не получается...

2. Программа сейчас получает текст под курсором везде где курсор летает, что не очень хорошо... А мне нужно только из окна браузеров (причем исключая их меню и прочие элементы управления). Как можно определить что "выдранный" текст у нас является тесктом html-документа из браузера? ну или по крайней мере хотя бы частично предотвратить получение текста из неинтересующих меня приложений/контролов и т.п. ? Можно конечно анализировать получаемый текст и решать: использовать его или нет, но это тоже извращение...


 
Очень Злой   (2012-11-04 18:16) [4]

О. вроде понял как получить родительский объект.  
так вроде работает...

function IaccParent(const IAcc : IAccessible):IAccessible;
var
  ParentDispatch : IDispatch;
begin
  ParentDispatch := nil;
  result:=nil;
  if IAcc.Get_accParent(ParentDispatch)=S_OK then
  if (ParentDispatch = nil) or (ParentDispatch.QueryInterface(IAccessible, result) <> S_OK) then  Result:=nil;
end;


 
Очень Злой   (2012-11-04 19:10) [5]

м-да. Видимо придется отказаться от этой затеи

Полазил через Iaccessible вверх и вниз (по parent и children) и обнаружил что в разных браузерах совершенно разная структура объектов... В файерфоксе еще можно что-то понять, а в ИЕ вообще муть какая-то....


 
MBo ©   (2012-11-05 13:18) [6]

У меня  своего опыта работы с этим нет. Видел, что в на sources.ru есть какой-то пример в FAQ



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

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

Наверх




Память: 0.48 MB
Время: 0.008 c
15-1358877111
Дмитрий С
2013-01-22 21:51
2013.06.02
Почтовый ретранслятор.


4-1265319431
ProgRAMmer Dimonych
2010-02-05 00:37
2013.06.02
Сообщения в неклиентской области окна


15-1358949798
Вопрошающий
2013-01-23 18:03
2013.06.02
полный Language Reference для FB2.5 - где?


15-1359113441
aka
2013-01-25 15:30
2013.06.02
Oberon


2-1351761460
mnj
2012-11-01 13:17
2013.06.02
Получение координат курсора в динамически созданном TImage