Проблема: мне нужно получить выделенный текст из окна приложения Windows (не моей программы). Я делаю свою работу в Delphi XE, и программное обеспечение, к которому я пытаюсь получить доступ, представляет собой клудж, созданный за последние 15 лет с помощью C, C++, VB и кто знает, чего еще. У меня нет исходного кода. Поле редактирования (памятка в формате RTF), которое я пытаюсь прочитать, относится к классу «Ter32Class». Когда я использую wm_copy
, ничего не попадает в буфер обмена. когда я использую wm_gettext
, ничего. Когда я использую команды wm_keydown
(для имитации Ctrl-Ins или Ctrl-C ) Ничего не произошло. Обратите внимание, что я могу заставить все эти альтернативы работать в wordpad, блокноте и FireFox, но не в этом приложении (или, кстати, в OpenOffice, но это не проблема). Единственный способ, которым я смог программно получить текст из этого поля, — это использовать автогорячую клавишу с простой командой «send ^c
». Пока это работает, это неэлегантно. ПОМОЩЬ?!?
Дополнительная информация: Иерархия окон: Ter32Class является дочерним элементом OI_Mdi, который является дочерним элементом MDIClient, который является дочерним элементом OI_Window. Я углубляюсь, чтобы получить соответствующий дескриптор, поскольку он будет реагировать на команду вставки.
Я использую Delphi XE, но мне бы понравилось любое решение на C++ или VB, если ни у одного гуру Delphi XE нет ответа.
SendInput
, чтобы правильно подделать ввод. Возможно, это один из тех случаев, когда отправки команд WM_KEYDOWN недостаточно. Возможно, вам придется сделать то же самое. - person David Heffernan   schedule 12.08.2011