Я хотел бы знать, как может я получать выделенный текст от любого окна, например: (Excel, т.е., Firefox, …). обратите внимание на то, что следующее сообщение не работает в вышеупомянутом приложении WM_GETTEXT, WM_COPY, EM_GETSELTEXT.
Я также попробовал управление C (копия) и получаю выделенный текст от буфера обмена, но это не хорошая идея.
Язык использовал: C#
Нет ответов, а? Ну, я знаю, что вы можете получить его от Excel, Word etc, используя Interop. Посмотри на это. Это может дать вам идеи сом, о том, как действовать с IE и FF. Но в основном это получение приложения должно иметь какую-то обшивку для того, чтобы позволить вам сделать это, и я не думаю, что есть любой общий способ, который работает все время.
Вот наименее Pythonic способ:
out = ""
for x in range(len(lst)):
for y in range(len(lst)):
if x + y == len(lst)-1:
out = lst[y] + out
-121--1217156- IEnumerable приходит на ум.
-121--1131762-Нет необходимости записывать это на языке 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
На этот вопрос нет ответа общего назначения. У каждого класса окна будет свое решение.
Например, если в окне редактирования находится текст с подсветкой, то вы можете использовать EM_GETSEL
для получения диапазона выделения, затем WM_GETTEXT для получения текста (а затем бросить невыделенную часть в сторону) или EM_LINEFROMCHAR
для преобразования этого диапазона в линейные индексы, а затем EM_GETLINE
для получения выделенного текста по одной строке за раз.
Но это не сработает ни для какого другого класса окон.
Я сам не пробовал, но Microsoft UI Automation API должен иметь нужную вам функциональность.
API автоматизации пользовательского интерфейса - это то, что вы использовали бы, если бы создавали программу чтения с экрана для помощи слепым людям. Таким образом, он определенно должен иметь доступ к выделенному тексту в произвольном приложении.
Хорошим местом для начала будет «Обзор текстового шаблона» по адресу http://msdn.microsoft.com/en-us/library/ms745158.aspx
Также следите за вопросом 517694 . Думаю, вы обнаружите, что ответы на этот вопрос решат вашу проблему.