Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.037 c
4-1119894938
Ванечка
2005-06-27 21:55
2005.08.21
Наличие ключа в реестре


1-1122368423
Dust
2005-07-26 13:00
2005.08.21
Создание логов


1-1122989846
slaga
2005-08-02 17:37
2005.08.21
Как в Delphi сделать диалог выбора папки


1-1122724385
SergProger
2005-07-30 15:53
2005.08.21
Установочная прога


14-1122753978
Green_Templar
2005-07-31 00:06
2005.08.21
Boot em





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский