从活动窗口中获取突出显示的文

时间:2010-01-13 15:37:57

标签: c# winforms

我想知道如何从任何窗口获取突出显示的文本,例如:(excel,即firefox,...)。 请注意,以下消息在上述申请中不起作用 WM_GETTEXT,WM_COPY,EM_GETSELTEXT。

我也尝试过控制C(复制)并从剪贴板中获取所选文本,但这不是一个好主意。

使用的语言:C#

4 个答案:

答案 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