码迷,mamicode.com
首页 > 系统相关 > 详细

UI Automation技术获取cmd或Powershell命令提示符窗口的实时内容

时间:2019-10-10 23:05:59      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:event   pre   name   ble   tom   first   att   rgs   技术   

事先打开的Powershell或cmd窗口中的文本,用其他方式难以拿到。但是用UI Automation可以轻松获取。
本工具在窗体上加入了一个Timer控件,每秒钟都查找桌面上是否有Powershell或cmd窗口,如果有就获取文本区域的内容。

代码如下:

using
System; using System.Windows.Automation; using System.Windows.Forms; using System.Text.RegularExpressions; namespace PowerShellTracker_CS { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { PropertyCondition PC1 = new PropertyCondition(property: AutomationElement.ControlTypeProperty, value: ControlType.Window); PropertyCondition PC2 = new PropertyCondition(property: AutomationElement.ClassNameProperty, value: "ConsoleWindowClass"); AutomationElement PS = AutomationElement.RootElement.FindFirst(scope: TreeScope.Children, condition: new AndCondition(PC1,PC2)); if (PS == null) {} else {PropertyCondition PC3 = new PropertyCondition(property: AutomationElement.NameProperty, value: "Text Area"); PropertyCondition PC4 = new PropertyCondition(property: AutomationElement.ControlTypeProperty, value: ControlType.Document); AutomationElement TA = PS.FindFirst(scope: TreeScope.Children, condition: new AndCondition(PC3, PC4)); if(TA == null) { textBox1.Text = "未找到窗口。"; } else { TextPattern TP = (TextPattern)TA.GetCurrentPattern(TextPattern.Pattern); System.Windows.Automation.Text.TextPatternRange TR = TP.DocumentRange; string Source= TR.GetText(-1); MatchCollection MC= Regex.Matches(Source, ".+"); Source =""; string LastLine = ""; foreach(Match match in MC) { if (match.Value == "\r") { } else { Source += match.Value + "\r\n"; LastLine = match.Value; } } textBox1.Text = Source + "最后一行是:" + LastLine; textBox1.SelectionStart = textBox1.TextLength; textBox1.ScrollToCaret(); } } } } }

 对应的VB.NET代码如下:

Imports System.Windows.Automation
Imports System.Windows.Forms
Imports System.Text.RegularExpressions
Public Class Form1
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Dim PC1 As PropertyCondition = New PropertyCondition([property]:=AutomationElement.ControlTypeProperty, value:=ControlType.Window)
        Dim PC2 As PropertyCondition = New PropertyCondition([property]:=AutomationElement.ClassNameProperty, value:="ConsoleWindowClass")
        Dim PS As AutomationElement = AutomationElement.RootElement.FindFirst(scope:=TreeScope.Children, condition:=New AndCondition(PC1, PC2))

        If PS Is Nothing Then
        Else
            Dim PC3 As PropertyCondition = New PropertyCondition([property]:=AutomationElement.NameProperty, value:="Text Area")
            Dim PC4 As PropertyCondition = New PropertyCondition([property]:=AutomationElement.ControlTypeProperty, value:=ControlType.Document)
            Dim TA As AutomationElement = PS.FindFirst(scope:=TreeScope.Children, condition:=New AndCondition(PC3, PC4))

            If TA Is Nothing Then
                TextBox1.Text = "未找到窗口。"
            Else
                Dim TP As TextPattern = CType(TA.GetCurrentPattern(TextPattern.Pattern), TextPattern)
                Dim TR As Text.TextPatternRange = TP.DocumentRange
                Dim Source As String = TR.GetText(-1)
                Dim MC As MatchCollection = Regex.Matches(Source, ".+")
                Source = ""
                Dim LastLine As String = ""
                For Each match As Match In MC
                    If match.Value = vbCr Then
                    Else
                        Source += match.Value & vbCrLf
                        LastLine = match.Value
                    End If
                Next
                TextBox1.Text = Source & "最后一行是:" & LastLine
                TextBox1.SelectionStart = TextBox1.TextLength
                TextBox1.ScrollToCaret()
            End If
        End If
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        With Me.Timer1
            .Interval = 1000
            .Enabled = True
        End With
    End Sub
End Class

 技术图片

 

UI Automation技术获取cmd或Powershell命令提示符窗口的实时内容

标签:event   pre   name   ble   tom   first   att   rgs   技术   

原文地址:https://www.cnblogs.com/ryueifu-VBA/p/11650786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!