Текущий архив: 2005.08.21;
Скачать: CL | DM;
Вниз
Как получить слово выделенное в другом приложении Найти похожие ветки
← →
leonidus © (2005-06-16 11:27) [0]Подскажите пожалуйста как мне получить из чужого окна зная его хэндл выделенный текст?
← →
Digitman © (2005-06-16 11:44) [1]смотря что за окно ...
← →
leonidus © (2005-06-16 11:48) [2]а в чем может быть подвох?
← →
Jay1982 © (2005-06-21 16:56) [3]Послать ему WM_COPY, и получишь его в буфере обмена
← →
Digitman © (2005-06-21 17:18) [4]
> Jay1982 © (21.06.05 16:56) [3]
> Послать ему WM_COPY, и получишь его в буфере обмена
щас.
пошли-ка Делфи-окну CPU Window WM_COPY - что получишь ?
правильно ! маргинальный жест - комбинацию из 3-х пальцев - со стороны Делфи ты получишь.
> leonidus © (16.06.05 11:48) [2]
в том что окно м.б. "нарисованным" прикладными (а не системными) средствами
← →
Grief © (2005-06-21 17:46) [5]А помоему, WM_Copy прокатит в 90% случаев. Я более надежного способа и не вижу
← →
leonidus © (2005-06-21 22:55) [6]ок пусть будет WM_Copy а как его послать, будем считать что хэндл окна мы имеем?
← →
ANB © (2005-06-21 23:22) [7]Получи хендл и класс контрола, в котором лежит текст. И опубликуй.
← →
ANB © (2005-06-21 23:25) [8]По идее, должно помочь - GetText, EM_GETSEL, Copy.
EM_GETSELTEXT - только для Rich Edit.
← →
leonidus © (2005-06-22 07:46) [9]а примерчик можно?
Получаю хендл и класс:
Wnd:= WindowFromPoint(pt);
GetWindowRect( Wnd, Rect );
GetWindowText( Wnd, buff, SizeOf( buff ) );
WndText := StrPas( buff );
GetClassName( Wnd, buff, SizeOf( buff ) );
NameClass := StrPas( buff );
что дальше?
← →
ANB © (2005-06-22 08:19) [10]
> leonidus © (22.06.05 07:46) [9]
- замечательно. А теперь опубликуй содержимое переменной NameClass.
← →
MS-MEN © (2005-06-22 09:29) [11]Система решение задачи такая
Выбираешь Handle родителя (Любое внешние окно) а затем пробегаешь
по всем дочерним окнам Button,Memo1,… и посылаешь всем одну и туже
команду em_CanUndo если результат равен 0 то орган (Memo,RichEdit)
поддерживает команду Undo это говорит о том, что мы попали на
расширенный редактор, так как Edit и т. п. не поддерживают команду UNDO
затем проверяешь скорее посылаешь
EM_GETSEL их много посмотри в спр. WinAPI
если результат не равен нулю, то заносишь в массив
результат, а также ссылку на это окно.
Вот и все.
Сообщение для получение выделенного текста - em_GetSel
Для того, что бы получить все дочерние окна на это есть много примеров.
← →
leonidus © (2005-06-24 13:55) [12]> MS-MEN дело в том, что меня интересует копирование не только из окон типа Edit и Memo, мне нужно копирование вообще из всех окно. Так например делает Lingvo, выделил текст, нажал Ctrl+Ins+Ins и получил перевод. Как сделать также?
Пытаюсь сделать так:
getcursorpos(pt);
hWnd:= WindowFromPoint(pt);
PostMessage(hWnd,WM_KEYDOWN,VK_CONTROL,0);
PostMessage(hWnd,WM_KEYDOWN,Ord("C"),0);
PostMessage(hWnd,WM_KEYUP,Ord("C"),0);
PostMessage(hWnd,WM_KEYUP,VK_CONTROL,0);
т.е. принудительно отправить окну под курсором Ctrl+C но ничего не выходит, подскажите пожалуйста где ошибка.
← →
ANB © (2005-06-24 14:46) [13]Везде. Так Ctrl+C не сэмулируешь. Это только через keybd_event отработает. Есть, наверное, способ и через сообщения, но это надо ИШ ждать.
> мне нужно копирование вообще из всех окно. Так например
> делает Lingvo
А лингво умеет копировать не из edit и memo ?
Если нужно универсально, то только GetText, EM_GETSEL, Copy.
В хелпе есть, как их юзать.
← →
MS-MEN © (2005-06-24 15:12) [14]leonidus © (24.06.05 13:55) [12]
Lingvo работает простым образом.
Находит все окна которые относятся к определенному процессу
а затем посылает сообщение WM_GETTEXT переводит WM_SETTEXT.
← →
ANB © (2005-06-24 15:25) [15]
> MS-MEN © (24.06.05 15:12) [14]
- WM_GETTEXT работает не всегда, GetText надежнее. Плюс оба способа вернут не выделенный, а весь текст. Вставка - лучше юзать EM_SETSEL, так как WM_SETTEXT тоже заменит весь текст и опять таки не всегда.
← →
MS-MEN © (2005-06-24 15:49) [16]ANB © (24.06.05 15:25) [15]
Да его не поймешь.
← →
leonidus © (2005-06-24 15:58) [17]ок хорошо, вызовем GetText, получим текст (кстати из любых контролов? скажем на окне FireFox`а или IE сработает) а как теперь получить именно выделеный текст?
← →
MS-MEN © (2005-06-24 16:01) [18]А попробуй тогда WM_COPY
← →
ANB © (2005-06-24 16:10) [19]
> leonidus © (24.06.05 15:58) [17]
- еще раз медленно и 2 раза прочитай
> ANB © (24.06.05 14:46) [13]
← →
leonidus © (2005-06-24 19:57) [20]а EM_GETSEL тоже нужно через SendMessage посылать?
← →
NikNet © (2005-06-24 20:20) [21]Удалено модератором
Примечание: Оп, дошел дошел до этого сообщения, три дня мало, целый месяц тебе
← →
Kerk © (2005-06-24 20:23) [22]Удалено модератором
Примечание: Offtopic
← →
NikNet © (2005-06-24 20:26) [23]Удалено модератором
← →
Kerk © (2005-06-24 20:31) [24]Когда кажется, тогда крестятся.. а я астматик... тьфу.. агностик.. потому и не крещусь..
← →
NikNet © (2005-06-24 20:36) [25]Удалено модератором
Примечание: 3 дня РО за многочисленные наезды
← →
leonidus © (2005-06-24 22:15) [26]>а что там такого NikNet написал то? Уж не моя ли тугодумность заставила его нервничать:) ?
И всетаки вопрос остается в силе. Проблема в том, что я с WinAPI очень слабо знаком, но чувтсвую что проблема то тут не очень сложная, помогите пожалуйста.
← →
leonidus © (2005-06-25 22:26) [27]люди, не бросайте, помогите!
← →
Kerk © (2005-06-25 22:36) [28]
The EM_GETSEL message retrieves the starting and ending character positions of the current selection in an edit control. You can send this message to either an edit control or a rich edit control.
Syntax
To send this message, call the SendMessage function as follows.
lResult = SendMessage( // returns LRESULT in lResult
(HWND) hWndControl, // handle to destination control
(UINT) EM_GETSEL, // message ID
(WPARAM) wParam, // = (WPARAM) (LPDWORD) wParam;
(LPARAM) lParam // = (LPARAM) (LPDWORD) lParam;
);
Parameters
wParam
Pointer to a buffer that receives the starting position of the selection. This parameter can be NULL.
lParam
Pointer to a buffer that receives the position of the first nonselected character after the end of the selection. This parameter can be NULL.
Return Value
The return value is a zero-based value with the starting position of the selection in the low-order word and the position of the first character after the last selected character in the high-order word. If either of these values exceeds 65,535, the return value is –1.
It is better to use the values returned in wParam and lParam because they are full 32-bit values.
Страницы: 1 вся ветка
Текущий архив: 2005.08.21;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.031 c