Получить выделенный текст из активного окна - PullRequest
6 голосов
/ 13 января 2010

Я хотел бы знать, как я могу получить выделенный текст из любого окна, например: (Excel, т.е. Firefox,…). обратите внимание, что следующее сообщение не работает в вышеуказанном приложении WM_GETTEXT, WM_COPY, EM_GETSELTEXT.

Я также пробовал управлять C (копировать) и получать выделенный текст из буфера обмена, но это не очень хорошая идея.

Используемый язык: C #

Ответы [ 4 ]

1 голос
/ 10 февраля 2010

Я сам не пробовал, но API автоматизации пользовательского интерфейса Microsoft должен обладать необходимыми вам функциями.

API автоматизации пользовательского интерфейса - это то, что вы использовали бы, если бы создавали программу чтения с экрана для помощи слепым людям. Так что он определенно должен иметь доступ к выделенному тексту в произвольном приложении.

Хорошее место для начала было бы с "Обзор текстового шаблона" в http://msdn.microsoft.com/en-us/library/ms745158.aspx

Также следите за вопросом 517694 . Я думаю, вы найдете, что ответы на этот вопрос решат вашу проблему.

1 голос
/ 26 января 2010

На этот вопрос нет универсального ответа. Каждый класс окна будет иметь свое решение.

Например, если выделенный текст находится в окне редактирования, вы можете использовать EM_GETSEL, чтобы получить диапазон выделения, затем WM_GETTEXT, чтобы получить текст (а затем отбросить невыбранную часть в некотором направлении) или EM_LINEFROMCHAR чтобы превратить этот диапазон в индексы строк, а затем EM_GETLINE, чтобы получить выделенный текст по одной строке за раз.

Но это не будет работать для любого другого класса окон.

1 голос
/ 25 января 2010

Нет ответов, а? Ну, я знаю, что вы можете получить его из Excel, Word и т. Д. С помощью взаимодействия. Посмотри на это. Это может дать вам некоторые идеи о том, как поступить с ie и ff. Но в основном у приложения-получателя должно быть какое-то удобство, позволяющее вам сделать это, и я не думаю, что есть какой-то общий способ, который работает постоянно.

0 голосов
/ 25 января 2010

Нет необходимости писать это на C # с нуля. Что не так с использованием буфера обмена? Этот скрипт гарантирует, что он восстановит то, что было в буфере обмена после его завершения.

Autohotkey делает это намного проще.

; Hotkey:  Ctrl Shift t

^!t::

; Remember what was in the clipboard
clipboardPrev = %clipboard%

; Clear the clipboard
clipboard:=

Sleep,200

; Send a Ctrl C to copy the current selection
SendInput, {Ctrl down}c{Ctrl up}

Sleep,200

; Get the current selection from the clipboard
selectedText=%Clipboard%

if SelectedText =
{
    ; If the first attempt didn't get any test, try again
    Sleep,200

    ; Send a Ctrl C to copy the current selection
    SendInput, {Ctrl down}c{Ctrl up}

    ; Get the current selection from the clipboard
    selectedText=%Clipboard%

}

; Restore the clipboard
clipboard=%clipboardPrev% 

MsgBox, %selectedText%

return
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...