2010-01-13 4 views
6

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

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

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

+1

Отправка команды копирования действительно не очень вежлива, я очень нервничаю, если плохое приложение будет вмешиваться в мой буфер обмена, в котором я бы поставил вещи с определенной целью. –

ответ

1

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

-1

Не нужно писать это на 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 
+2

Я верю, что ваш ответ на неправильном языке;) – caesay

+0

Я понимаю, что он просит его на C#, но это потребует * много работы и тестирования. Вы можете скомпилировать это для исполняемого файла, а затем просто вызвать из приложения C#, используя класс Process. – Ash

+0

привет, спасибо за ваш ответ В настоящее время в моем приложении я использую метод буфера обмена, но у меня проблемы с Google Chrome. После отправки элемента управления c в Google chrome выбранный текст или значение буфера обмена пуст. Я видел много программ, таких как wordweb .., которые могут получить выделенный текст без использования буфера обмена, как я могу это сделать? Извините за мой плохой английский. – Gaby

1

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

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

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

1

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

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

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

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

Смежные вопросы