首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从.Net中屏幕抓取控制台窗口

从.Net中屏幕抓取控制台窗口
EN

Stack Overflow用户
提问于 2015-05-28 23:46:10
回答 1查看 1.2K关注 0票数 0

我有一个古老的基于DOS的命令行系统,我需要从其中提取大量数据,而不能直接访问这些数据。

有没有一种方法可以使用UI自动化或类似的方法来写入已经运行的控制台窗口(并从其中的特定部分读取)?最好是在C#中。

这样我就可以远程控制系统,遍历其中的数据,并将其转储出去。

EN

回答 1

Stack Overflow用户

发布于 2015-05-30 00:18:13

这应该可以做到:

代码语言:javascript
复制
    public static IEnumerable<string> GetScreenContents(AutomationElement window)
    {
        var systemButton = window.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "System"));
        var pattern = (ExpandCollapsePattern)systemButton.GetCurrentPattern(ExpandCollapsePattern.Pattern);
        pattern.Expand();
        SendKeys.SendWait("E");
        SendKeys.SendWait("S");
        Thread.Sleep(100);
        pattern.Expand();
        SendKeys.SendWait("E");
        SendKeys.SendWait("Y");
        Thread.Sleep(100);
        var clipText = Clipboard.GetText();

        var screenWidth = 150;

        return Enumerable.Range(0, clipText.Length / screenWidth)
            .Select(i => clipText.Substring(i * screenWidth, screenWidth));
    }

它的前2/3转到给定的AutomationElement,找到系统按钮(左上角的小部件,它有一个系统功能的下拉菜单),然后选择“编辑->全选”。然后,它再次执行此操作,只需使用"Edit->Copy“。

最后三分之一获取文本并将其分成屏幕宽度的块(在我的例子中是150个字符)。

您可以使用以下命令从给定的hWnd获取AutomationElement:

代码语言:javascript
复制
        var window = AutomationElement.FromHandle(hWnd);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30511319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档