Тип контрола, в котором выделили текст в общем случае заранее неизвестен. Дескриптор этого окна так или иначе получается через глобальную каллбэк функцию-фильтр(только неизвестно пока, есть ли в данном окне в данный момент выделенный текст) Заранее благодарен любым советам.
ubil Если GetWindowText не работает (для edit эта функция как раз и не работает), то можно попробовать через буфер обмена. Больше никак, AFAIK.
Quantum В первом случае, насколько я понимаю, я получу весь текст, а не только выделенный, походу не подойдет; А во втором, мне интересно, как выделенный текст попадет в буфер обмена, если пользователь только выделит текст, но не нажмет ctrl+c или типа того? ЗЫ: The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another application. ЗЗЫ: To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText. ^^^Это надо поботать... Но все-равно я не понимаю пока как я именно выделенный текст получу, а также как я узнаю что выделенный текст там есть вообще. ЗЗЗЫ: Windows 2000/XP: Sending a WM_GETTEXT message to a non-text static control, such as a static bitmap or static icon control, does not return a string value. Instead, it returns zero. In addition, in previous versions of Microsoft Windows and Microsoft Windows NT, applications could send a WM_GETTEXT message to a non-text static control to retrieve the control's ID. To retrieve a control's ID in Windows 2000/XP, applications can use... ^^^ В общем я по-прежнему пока х/з как это сделать
ubil Проглядел ctrl+c или WM_COPY можно сгенерировать программно. Послать WM_GETTEXT в другой процесс - это не так просто, как кажется, т.к. буфер нужно поместить в адресное пространство целевого процесса.
Quantum AFAIK, WM_GETTEXT и копирует с другого процесса. А GetWindowText - только в пределах текущего, о чём и сказано.
ubil : >Тип контрола, в котором выделили текст в общем случае заранее неизвестен [...] >Заранее благодарен любым советам. Пожалуйста: OCR (оптическое распознавание символов), см. www.structurise.com/kleptomania Quantum : >>Если GetWindowText не работает (для edit эта функция как раз и не работает), то можно попробовать через буфер обмена. Больше никак, AFAIK. >Послать WM_GETTEXT в другой процесс - это не так просто, как кажется, т.к. буфер нужно поместить в адресное пространство целевого процесса. IceStudent : >AFAIK, WM_GETTEXT и копирует с другого процесса. А GetWindowText - только в пределах текущего, о чём и сказано. Как сказать, как сказать... Берем WinTreeSnap (http://www.wasm.ru/forum/attachment.php?item=154), делаем ему ярлык, ассоциированный с комбинацией клавиш (скажем - Ctrl+Shift+W), выбираем на рабочем столе иконку, в ее контекстном меню нажимаем "Переименовать" (тем самым создавая временный edit как продолжение цепочки Progman -> SHELLDLL_DefView -> SysListView32), вводим новый текст, но не завершаем переименование, а жмем Ctrl+Shift+W (прежний текст потом можно восстановить: Esc). В последней колонке "SendMessage WM_GETTEXT /GetWindowText" полученного тестового снапшота - видим оба текста иконки.
Короче, пользуясь функцией SendInput посылаю сообщения клавиатурные ctrl+c/ctrl+v в данное окошко, а буфер обмена - вещь глобальная, к нему уже получить доступ не проблема...