none
向chrome发送Ctrl+C时,不能获取选定的文本(C#) RRS feed

  • 问题

  • 1 我建的winfrom项目,然后重写了消息处理过程

    2 其它的都是按照既定的逻辑执行,仅只当在chrome页面中选定文本,if中的表达式为假。事实上,chrome是接到了ctrl+C,也执行了。但是当我的程序执行时,chrome还没有处理完消息,所以表达式为假。但是,我尝试过手动threat.sleep(),发现没有用,

    3 之前有一个人说过,不能在wndProc()中发送消息,这样消息会“混乱”,但是那样实现会变复杂,写的很乱,后面也就没弄了。

    4 如果您不能解决这样问题,可以谈谈想法,我尝试过在新的线程中处理,会出新的问题,不能解决问题。

    2014年12月18日 8:03

答案

  • 你好:

    这篇帖子讲的是相同的问题:

    capture selected text from other applications problem

    CTRL+C并不是在所有的程序里面都代表复制到剪贴板,所以这种做法不是太好。建议你按照这个帖子中的回复,使用Microsoft UI Automation来获取其它应用程序中的内容,C#代码可以参考:

    Obtain Text Attributes Using UI Automation

    关于如何获取到选中的文本,参考以下示例代码:

    Process[] plist = Process.GetProcesses();
    
            foreach (Process p in plist) {
                if (p.ProcessName == "notepad") {
    
                    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();
                        lblSelectedText.Text = trs[0].GetText(-1);
                    }
                }
            }
    


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年12月19日 5:50
    版主