LzmTW 7/24/2004
http://blog.youkuaiyun.com/lzmtw/
注:程序在WINDOWS98还不能正常运行。
Public Class frmCmdExcute
Inherits System.Windows.Forms.Form
Dim sw As System.IO.StreamWriter
Dim sr As System.IO.StreamReader
Dim err As System.IO.StreamReader
Dim p As System.Diagnostics.Process = New System.Diagnostics.Process
Dim psI As New System.Diagnostics.ProcessStartInfo(System.Environment.GetEnvironmentVariable("ComSpec"))
#Region " Windows 窗体设计器生成的代码 "
Public Sub New()
MyBase.New()
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
'窗体重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
Friend WithEvents tbResult As System.Windows.Forms.TextBox
Friend WithEvents Panel1 As System.Windows.Forms.Panel
Friend WithEvents btnExcute As System.Windows.Forms.Button
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents btClear As System.Windows.Forms.Button
Friend WithEvents btLocate As System.Windows.Forms.Button
Friend WithEvents tbComText As System.Windows.Forms.ComboBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.tbResult = New System.Windows.Forms.TextBox
Me.Panel1 = New System.Windows.Forms.Panel
Me.tbComText = New System.Windows.Forms.ComboBox
Me.btLocate = New System.Windows.Forms.Button
Me.btClear = New System.Windows.Forms.Button
Me.Label1 = New System.Windows.Forms.Label
Me.btnExcute = New System.Windows.Forms.Button
Me.Panel1.SuspendLayout()
Me.SuspendLayout()
'
'tbResult
'
Me.tbResult.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.tbResult.BackColor = System.Drawing.SystemColors.Info
Me.tbResult.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.tbResult.Location = New System.Drawing.Point(8, 8)
Me.tbResult.Multiline = True
Me.tbResult.Name = "tbResult"
Me.tbResult.ReadOnly = True
Me.tbResult.ScrollBars = System.Windows.Forms.ScrollBars.Both
Me.tbResult.Size = New System.Drawing.Size(584, 304)
Me.tbResult.TabIndex = 0
Me.tbResult.TabStop = False
Me.tbResult.Text = ""
'
'Panel1
'
Me.Panel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Panel1.Controls.Add(Me.tbComText)
Me.Panel1.Controls.Add(Me.btLocate)
Me.Panel1.Controls.Add(Me.btClear)
Me.Panel1.Controls.Add(Me.Label1)
Me.Panel1.Controls.Add(Me.btnExcute)
Me.Panel1.Location = New System.Drawing.Point(8, 320)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(584, 40)
Me.Panel1.TabIndex = 1
'
'tbComText
'
Me.tbComText.Location = New System.Drawing.Point(264, 8)
Me.tbComText.Name = "tbComText"
Me.tbComText.Size = New System.Drawing.Size(224, 20)
Me.tbComText.TabIndex = 5
Me.tbComText.Text = "Dir"
'
'btLocate
'
Me.btLocate.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btLocate.Location = New System.Drawing.Point(96, 8)
Me.btLocate.Name = "btLocate"
Me.btLocate.Size = New System.Drawing.Size(80, 24)
Me.btLocate.TabIndex = 4
Me.btLocate.Text = "定位(&L)"
'
'btClear
'
Me.btClear.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btClear.Location = New System.Drawing.Point(8, 8)
Me.btClear.Name = "btClear"
Me.btClear.Size = New System.Drawing.Size(80, 24)
Me.btClear.TabIndex = 3
Me.btClear.Text = "清空(&C)"
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(208, 8)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(48, 16)
Me.Label1.TabIndex = 2
Me.Label1.Text = "命令:"
'
'btnExcute
'
Me.btnExcute.Enabled = False
Me.btnExcute.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnExcute.Location = New System.Drawing.Point(496, 8)
Me.btnExcute.Name = "btnExcute"
Me.btnExcute.Size = New System.Drawing.Size(80, 24)
Me.btnExcute.TabIndex = 1
Me.btnExcute.Text = "执行(&E)"
'
'frmCmdExcute
'
Me.AcceptButton = Me.btnExcute
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(600, 365)
Me.Controls.Add(Me.Panel1)
Me.Controls.Add(Me.tbResult)
Me.Name = "frmCmdExcute"
Me.Text = "Command Excute Result"
Me.Panel1.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
#End Region
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 btLocate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btLocate.Click
Dim bd As New FolderBrowserDialog
If bd.ShowDialog = DialogResult.OK Then
System.Environment.CurrentDirectory = bd.SelectedPath
End If
End Sub
Private Sub tbComText_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles tbComText.KeyUp
If e.KeyData = Keys.Enter Then
Dim cmd As String = Me.tbComText.Text.ToLower
If cmd.Equals(String.Empty) Then cmd = "Dir "
Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
sw.WriteLine(cmd)
Me.tbResult.Text = sr.ReadToEnd()
Me.tbResult.Text += err.ReadToEnd()
Me.Cursor = System.Windows.Forms.Cursors.Default
Dim Current As String = String.Empty
If cmd.StartsWith("cd/") Or cmd.StartsWith("cd ") Then
Current = cmd.Substring(3)
End If
If cmd.EndsWith(":") Then
Current = cmd
End If
If Not Current.Equals(String.Empty) Then
If IO.Directory.Exists(Current) Then
System.Environment.CurrentDirectory = Current
End If
End If
Me.tbComText.Items.Add(Me.tbComText.Text)
Me.tbComText.SelectionStart = 0
Me.tbComText.SelectionLength = Me.tbComText.Text.Length
Me.tbComText.Focus()
End If
End Sub
Private Sub btnExcute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcute.Click
Me.CmdExcute()
Dim cmd As String = Me.tbComText.Text.ToLower
If cmd.Length = 0 Then Exit Sub
Dim Current As String = String.Empty
If cmd.StartsWith("cd/") Or cmd.StartsWith("cd ") Then
Current = cmd.Substring(3)
End If
If cmd.EndsWith(":") Then
Current = cmd
End If
If Not Current.Equals(String.Empty) Then
If IO.Directory.Exists(Current) Then
System.Environment.CurrentDirectory = Current
End If
End If
Me.tbComText.Items.Add(Me.tbComText.Text)
Me.tbComText.SelectionStart = 0
Me.tbComText.SelectionLength = Me.tbComText.Text.Length
Me.tbComText.Focus()
End Sub
Private Sub CmdExcute()
Dim sw As System.IO.StreamWriter
Dim sr As System.IO.StreamReader
Dim err As System.IO.StreamReader
Dim p As System.Diagnostics.Process = New System.Diagnostics.Process
Dim psI As New System.Diagnostics.ProcessStartInfo(System.Environment.GetEnvironmentVariable("ComSpec"))
psI.UseShellExecute = False
psI.RedirectStandardInput = True
psI.RedirectStandardOutput = True
psI.RedirectStandardError = True
psI.CreateNoWindow = True
p.StartInfo = psI
Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
p.Start()
sw = p.StandardInput
sr = p.StandardOutput
err = p.StandardError
sw.AutoFlush = True
If Me.tbComText.Text <> "" Then
sw.WriteLine(Me.tbComText.Text)
Else
sw.WriteLine("Dir ")
End If
sw.Close()
Me.tbResult.Text = sr.ReadToEnd()
Me.tbResult.Text += err.ReadToEnd()
Me.Cursor = System.Windows.Forms.Cursors.Default
End Sub
Public Shared Sub Main ()
If System.Environment.OSVersion.ToString.IndexOf("NT") = -1 Then
MsgBox("暂时不支持非NT系统,程序退出!")
Application.Exit()
Else
Application.Run(New frmCmdExcute)
End If
End Sub
Private Sub frmCmdExcute_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
With psI
.UseShellExecute = False
.RedirectStandardInput = True
.RedirectStandardOutput = True
.RedirectStandardError = True
.CreateNoWindow = True
End With
p.StartInfo = psI
p.Start()
With p
sw = .StandardInput
sr = .StandardOutput
err = .StandardError
End With
sw.AutoFlush = True
End Sub
Private Sub frmCmdExcute_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
p.Close()
sw.Close()
sr.Close()
err.Close()
End Sub
End Class