Главная страница
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.025 c
8-1079200504
Step[B.M.]
2004-03-13 20:55
2004.05.30
Кто работает с компоненами WaveAudio.


14-1084302337
Drakon
2004-05-11 23:05
2004.05.30
Математические алгоритмы вычисления Sin, Cos, Tan


11-1073898845
avakss
2004-01-12 12:14
2004.05.30
QueryEndSession


4-1082457137
Alexandr_N
2004-04-20 14:32
2004.05.30
Время


3-1084353383
Санёк
2004-05-12 13:16
2004.05.30
Как сделать чтобы LookupComboBox просто подставлял значения