xsel for windows等效API或命令行?

时间:2011-09-23 11:34:06

标签: windows winapi

是否有API或命令行实用程序从活动窗口甚至全局返回当前选定的文本,例如linux实用程序“xsel”?

  • 我不介意获得不到100%的成功。
  • 我知道每个窗口都有自己的文本选择,但现在可以忽略不计。
  • 目前我唯一的解决方案/解决方法是发送密码“ctrl + c”并从剪贴板中读取,但这有两个显而易见的原因,这是一个糟糕的解决方案。
  • 我知道如何在MS-Word上做到这一点,但这只占1%。

感谢

修改

this discussion我了解到选择文本的技术太多了。所以我会回到使用剪贴板。不管怎么说,还是要谢谢你。

如果有人有奇迹,我会暂时搁置这个问题。

2 个答案:

答案 0 :(得分:1)

这是我从几个来源编译的解决方案。

  • 它只适用于简单的文本控件。对于其他类型的文本,还有其他解决方案,但为了简单起见,我将使用剪贴板。

(对于完整的代码,声明和依赖关系,google为“SendMessage hWndCaret”)

If hWndCaret <> 0 Then

    'first, get all text

    nLength = SendMessage(hWndCaret, WM_GETTEXTLENGTH, 0&, ByVal 0&)
    If nLength <> 0 Then
        buff = Space$(nLength + 1)
        res = SendMessage(hWndCaret, WM_GETTEXT, nLength + 1, ByVal buff)
        If res <> 0 Then Txt = Left$(buff, res)
    End If

    ' then
    If nLength <> 0 Then
        buff = Space$(nLength + 1)
        res = SendMessage(hWndCaret, EM_GETSEL, VarPtr(StartPos), EndPos)

        selection = Mid(Txt, StartPos + 1, EndPos - StartPos)
    End If

End If

答案 1 :(得分:0)

检查该程序是否支持IAccessible / IAccClientDocMgrTextPattern_GetSelection / TextRange_GetText等可访问界面。由于美国残疾人法案,许多软件需要实施可供出售给美国政府。您可以在窗口上调用AccessibleObjectFromWindow或AutomationElement :: FromHandle。

看起来没有人记录他们的可访问对象树,如果存在API,那么API是从程序获取信息的首选方式。例如。如果应用程序是IE,您应该使用Q249232来获取IHTMLDocumnent2。在UI间谍中检查时,IE7和IE8的可评估树有重大变化。

对于其他节目,你可能会运气不好。使用UISpy时,我无法在登录电子邮件编辑中找到选择。可访问性取决于程序员在程序中实现可访问性的良好意愿。