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

Вниз

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

 
esVer ©   (2004-04-15 14:04) [0]

Не подскажет ли уважаемое сообщество, как получить выделенный текст в чужом окне?
Найти активное окно и в нем активное дочернее окно - получается. А вот получить выделенный текст в нём - проблема :((


 
BlackTr   (2004-04-15 14:16) [1]

WM_GETTEXT


 
Игорь Шевченко ©   (2004-04-15 14:26) [2]

EM_GETSELTEXT ?


 
esVer ©   (2004-04-15 14:49) [3]

Это всё опробовано.
Вариант 1)
 
var
 h : hWnd;
 st : string;
...
 SetLength(st, SendMessage(h, WM_GETTEXTLENGTH, 0, 0)+1);
 SendMessage(h, WM_GETTEXT, length(st), Integer(PChar(st)));
 SetLength(st, lStrLen(PChar(st)));

Получаем текст из простых TEdit и TMemo, но пролетаем со всякими нестандартными контролами :(

Вариант 2)
 
var
 h : hWnd;
 st : string;
 CharRange: TCharRange;
 i : integer;
...
 SendMessage(h, EM_EXGETSEL, 0, Longint(@CharRange));
 SetLength(st, CharRange.cpMax - CharRange.cpMin + 1);
 i:=SendMessage(h, EM_GETSELTEXT, 0, Longint(PChar(st)));
 SetLength(st, i);

Тут вообще засада... Ничего не получаю, а иногда вылазит "Out of memory" :(

Вариант 3)
 Использовать WM_COPY, в этом случае можно получить текст из некоторых нестандартных контролов, но не всех :(, да и к тому же буфер затирается...


 
BlackTr   (2004-04-15 15:06) [4]

А с нестандартных вообще по идее нельзя получить.
Вариант 4) Делать снимок экрана и разбирать графику :))


 
Игорь Шевченко ©   (2004-04-15 15:10) [5]

esVer ©   (15.04.04 14:49)

Так никто не говорит, что из любого окна можно получить выделенный текст...


 
esVer ©   (2004-04-15 15:14) [6]

Ребята, я всё понимаю, но есть программы (всякие разные там перекодировщики), которые этот текст таки получают, из тех самых окон, из которых я получить не могу :(
Значит как-то можно?

И еще про вариант 2: код вроде бы брал из richedit.pas, а работать не хочет. Где я не прав?


 
BlackTr   (2004-04-15 16:18) [7]

А эти перекодировщики, скорее всего работают по методу Copy&Paste.
Вар 2 как бы только для RichEdit :)
MSDN:The EM_EXGETSEL message retrieves the starting and ending character positions of the selection in a rich edit control.


 
esVer ©   (2004-04-15 16:25) [8]


> А эти перекодировщики, скорее всего работают по методу Copy&Paste.


возможно, но буфер обмена не портится, хотя, может они его восстанавливают.


> Вар 2 как бы только для RichEdit :)


м.б., но при проверке на редакторе Bred, класс окна RichEdit, а срабатывает вариант EM_GETSEL + WM_GETTEXT и никаких EM_EXGETSEL не надо...


 
VMcL ©   (2004-04-15 16:28) [9]

>>esVer ©  (15.04.04 15:14) [6]

Они глобальный хук WH_KEYBOARD ставят.



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

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

Наверх




Память: 0.48 MB
Время: 0.026 c
4-1081746607
Delphi5.01
2004-04-12 09:10
2004.05.30
Как используя только API функции можно включить WordWrap


8-1080121247
Jeka_
2004-03-24 12:40
2004.05.30
Запись видео или изображения с вэб-камеры.


14-1084441323
TUser
2004-05-13 13:42
2004.05.30
AutoCAD?


1-1084786460
Awod
2004-05-17 13:34
2004.05.30
Иконка приложения в WIN9X


3-1083217697
lightix
2004-04-29 09:48
2004.05.30
Проблемы с ADO + Oracle