我想知道如何从任何窗口获取突出显示的文本,例如:(excel,即firefox,...)。 请注意,以下消息在上述申请中不起作用 WM_GETTEXT,WM_COPY,EM_GETSELTEXT。
我也尝试过控制C(复制)并从剪贴板中获取所选文本,但这不是一个好主意。
使用的语言:C#
答案 0 :(得分:1)
没有答案吧?好吧,我知道你可以使用互操作从Excel,Word等中获取它。看看那个。它可能会给你关于如何继续ie和ff的som想法。但基本上接收应用程序必须具有某种让你做到这一点的能力,我认为没有任何一般方法可以一直有效。
答案 1 :(得分:1)
这个问题没有通用的答案。每个窗口类都有不同的解决方案。
例如,如果高亮显示的文本位于编辑窗口中,则可以使用EM_GETSEL
获取选择范围,然后使用WM_GETTEXT获取文本(然后将未选择的部分抛出一个方向)或EM_LINEFROMCHAR
将该范围转换为行索引,然后EM_GETLINE
将所选文本一次转换为一行。
但这不适用于任何其他窗口类。
答案 2 :(得分:1)
我自己没有尝试过,但Microsoft UI Automation API应该具备您需要的功能。
如果您正在构建一个屏幕阅读器来帮助盲人,那么您将使用UI Automation API。所以它绝对应该能够在任意应用程序中访问所选文本。
一个好的起点是http://msdn.microsoft.com/en-us/library/ms745158.aspx
上的“文字模式概述”另请密切关注问题517694。我想你会发现这个问题的答案可以解决你的问题。
答案 3 :(得分:-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