Главная страница
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.036 c
11-1074434799
Valter
2004-01-18 17:06
2004.05.30
FastListView


6-1081631172
StarEvil
2004-04-11 01:06
2004.05.30
ipconfig.exe на Delphi


1-1084741869
Mishenka
2004-05-17 01:11
2004.05.30
Удаление списка?


3-1084277298
lovres
2004-05-11 16:08
2004.05.30
Касяк с DBCombobox. Подскажите, плз.


7-1082477705
tyoma
2004-04-20 20:15
2004.05.30
Поиск установленного ПО