打印本文 打印本文 关闭窗口 关闭窗口
vb.net的windows窗体实现dos命令
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2070  更新时间:2009/4/23 19:00:30  文章录入:mintao  责任编辑:mintao
tics.Process = New System.Diagnostics.Process
    Dim psI As New System.Diagnostics.ProcessStartInfo(System.Environment.GetEnvironmentVariable("ComSpec"))
#End Region

    Private Sub frmCmdExcute_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        p = New System.Diagnostics.Process
        ''''"cmd.exe"为nt的命令行程序
        psI = New System.Diagnostics.ProcessStartInfo("cmd.exe")
        psI.UseShellExecute = False
        psI.RedirectStandardInput = True
        psI.RedirectStandardOutput = True
        psI.RedirectStandardError = True
        psI.CreateNoWindow = True
        p.StartInfo = psI

        p.Start()
        sw = p.StandardInput
        sr.stream = p.StandardOutput
        err.stream = p.StandardError
        sw.AutoFlush = True
        sr.stream.BaseStream.BeginRead(sr.bytes, 0, 1024, New AsyncCallback(AddressOf CBstream), sr)
        err.stream.BaseStream.BeginRead(err.bytes, 0, 1024, New AsyncCallback(AddressOf CBstream), err)
    End Sub

    Private Sub frmCmdExcute_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
        p.Close()
        If Not sw Is Nothing Then
            sw.Close()
        End If
        If Not sr Is Nothing Then
            sr.stream.Close()
        End If
        If Not err Is Nothing Then
            err.stream.Close()
        End If

    End Sub

    Private Sub btClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btClear.Click
        Me.tbResult.Text = String.Empty
    End Sub

    Private Sub btnExcute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcute.Click
        Me.CmdExcute()
    End Sub

    Private Sub CmdExcute()
        Try
            Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
            If Me.tbComText.Text <> "" Then
                sw.WriteLine(Me.tbComText.Text)
            Else
                sw.WriteLine("Dir")
            End If
            Me.Cursor = System.Windows.Forms.Cursors.Default

            ''''向combobox中添加元素
            Me.tbComText.Items.Add(Me.tbComText.Text)
            Me.tbComText.SelectionStart = 0
            Me.tbComText.SelectionLength = Me.tbComText.Text.Length
            Me.tbComText.Focus()
        Catch ex As Exception
            MsgBox("CmdExcute--" & ex.ToString)
        End Try
    End Sub

    Private Sub AppText(ByVal strAdd As String)
        Me.tbResult.Text &= strAdd
    End Sub

    ''''回调函数
    ''''为了保证执行invoke方法的线程顺序,使用了MethodImpl
    <MethodImpl(MethodImplOptions.Synchronized)> _
     Sub CBstream(ByVal s As IAsyncResult)
        Try
            Dim t As MyStreamReader = CType(s.AsyncState, MyStreamReader)
            If t.stream.BaseStream Is Nothing Then
                Exit Sub
            End If
            Dim i As Integer = t.stream.BaseStream.EndRead(s)
            Dim strReceive As String = System.Text.Encoding.Default.GetString(t.bytes, 0, i)
            Me.Invoke(New TextAddHandler(AddressOf AppText), New Object() {strReceive})
            t.stream.BaseStream.BeginRead(t.bytes, 0, 1024, New AsyncCallback(AddressOf CBstream), t)
        Catch ex As Exception
            MsgBox("CBstream--" & ex.ToString)
        End Try
    End Sub

    Friend Class MyStreamReader
        Public stream As IO.StreamReader
        Public bytes(1024) As Byte
        Public Sub New()
        End Sub
    End Class
End Class
 

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口