使用c#从其他应用程序中获取所选文本

时间:2016-08-19 12:40:27

标签: c# .net automation clipboard ui-automation

我正在开发一个项目,当用户选择一些文本时,需要从其他应用程序中获取所选文本。

我使用globalmousekeyhook来监控用户点击应用程序的时间,我对此没有任何问题。

我的问题是获取所选文本,因为我知道有两种方法可以从其他应用程序中获取所选文本:

1 - 发送复制命令(like this):
这种方式适用于剪贴板,并导致一些应用程序的一些问题,如Adobe阅读器(problem),IDM(clipboard links)和其他也适用于剪贴板的应用程序。

2 - 使用UI自动化:
我已经尝试过看到这种方式不能用于get selected text from ANY window (using UI Automation)

我还编辑了this代码,但是它仍然是不工作并减慢我的电脑速度

Process p = Process.GetCurrentProcess();

AutomationElement ae = AutomationElement.FromHandle(p.MainWindowHandle);

AutomationElement npEdit = ae.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ClassNameProperty, "Edit"));

TextPattern tp = npEdit.GetCurrentPattern(TextPattern.Pattern) as TextPattern;

TextPatternRange[] trs;

if (tp.SupportedTextSelection == SupportedTextSelection.None)
{
      return;
}
else
{
      trs = tp.GetSelection();
      label1.Text = trs[0].GetText(-1);
}


是否有另一种方法可以从其他应用程序中获取所选文本?
或者第二种方式不能用于执行工作?

感谢您的帮助...

1 个答案:

答案 0 :(得分:0)

方法可能是使用Spy++。获取句柄,提取并解析所需的数据。