`

vb.net的windows窗体实现dos命令

 
阅读更多

这个例子是从 水如烟的例子 修改过来的。如有不妥之处还请大家指正批评。

Imports System.Threading
Imports System.Runtime.CompilerServices
Public Class frmCmdExcute
Inherits System.Windows.Forms.Form

#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 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.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.ScrollBars = System.Windows.Forms.ScrollBars.Both
Me.tbResult.Size = New System.Drawing.Size(584, 304)
Me.tbResult.TabIndex = 0
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.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(224, 8)
Me.tbComText.Name = "tbComText"
Me.tbComText.Size = New System.Drawing.Size(224, 20)
Me.tbComText.TabIndex = 5
Me.tbComText.Text = "Dir"
''''
''''btClear
''''
Me.btClear.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btClear.Location = New System.Drawing.Point(40, 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(160, 8)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(48, 16)
Me.Label1.TabIndex = 2
Me.Label1.Text = "命令:"
''''
''''btnExcute
''''
Me.btnExcute.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnExcute.Location = New System.Drawing.Point(472, 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

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 Delegate Sub TextAddHandler(ByVal strPara As String)

#Region "private viable"
Dim sw As IO.StreamWriter
Dim sr As New MyStreamReader
Dim err As New MyStreamReader
Dim p As System.Diagnostics.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

分享到:
评论

相关推荐

    VB.NET命令提示符

    总之,“VB.NET命令提示符”是一个将传统DOS命令集成到现代Windows环境的实用工具,它的实现涉及到了VB.NET的窗体应用开发、进程管理和命令行接口。通过使用这样的工具,用户可以在图形界面下便捷地进行命令行操作,...

    vb的仿真dos命令行输出

    3. **Redirecting Output**:为了获取命令的输出,我们可以使用`System.Diagnostics.Process`类(在VB.NET中),它可以捕获标准输出和错误流。在VB6中,这需要通过API函数如`AllocConsole`和`WriteFile`来实现。 4....

    VB完美模仿DOS命令行输出

    综上所述,通过VB创建一个模拟DOS命令行的应用,需要理解DOS命令、掌握VB中的Shell函数或WScript.Shell对象,以及如何设计用户友好的界面。同时,利用类模块可以进一步优化代码结构,提高程序的效率和可扩展性。在这...

    DOS控制台程序的软件源码

    综合以上信息,我们可以推测这个资源包提供了一套用VB编写的DOS控制台程序示例,包括了调用DOS命令、处理命令输出等功能。开发者可以通过阅读和分析源码,学习如何在VB中实现对DOS系统的操作,以及如何设计和构建...

    vb操作cmd命令行读取返回值

    为了获取命令行的输出,我们需要使用`CreateProcess` API或者`System.Diagnostics.Process`类(VB.NET)配合管道通信。在VB6中,可以使用`WScript.Shell`对象的`Run`方法,并通过`StdOut`属性获取输出,如以下示例所...

    捕捉DOS的输出

    2. `frmDOSOutput.frm`:这是窗体(Form)文件,通常包含用户界面的设计,可能有一个文本框或其他控件来显示DOS命令的输出。 3. `Readme.txt`:这个文件通常包含了项目的说明、使用指南或开发者的一些注释。 4. `...

    Ch1VB程序设计概述PPT学习教案.pptx

    VB的发展历程始于1991年,从VB1.0到VB.NET,它不断进化以适应操作系统和技术的变革,如从DOS和Windows 3.X到Windows 95、NT以及更高版本。 VB的主要特点包括: 1. **可视化设计平台**:VB提供了可视化的界面设计...

    VB6-SirkMini_2019.02.20 (1).rar

     3、支持创建控制台应用程序:生成的应用程序没有任何窗体,所有输入输出均通过系统命令行进行,真正的控制台字符界面,使用体验和DIR、DELETE、COPY等DOS命令完全一致。除此之外还支持标准EXE、ActiveX EXE、...

    2021-2022计算机二级等级考试试题及答案No.11525.docx

    9. **DOS命令**:DISKCOMP用于比较两个磁盘或磁盘上的两个文件,合法的DOS命令是`DISKCOMP A: B:`。 10. **一维数组声明**:在C/C++中,正确声明一维数组的方式是`int a[10];`。 11. **Windows通配符**:在Windows...

    2021-2022计算机二级等级考试试题及答案No.11805.docx

    1. DOS命令:合法的DOS命令是`COPY`,用于复制文件。题目中提到的`DISKCOMP`可能是用来比较两个磁盘或文件的命令,但不是标准DOS命令。 2. WWW浏览:浏览网页并非只能使用Internet Explorer和Netscape Navigator,...

    2021-2022计算机二级等级考试试题及答案No.3128.docx

    - 代码隐藏页模型将页面的设计部分(HTML/XHTML标记)与逻辑部分(C#或VB.NET代码)分离。 - 正确答案:**代码隐藏页模型** ### Python 函数调用与全局变量 6. **全局变量与函数调用** - 调用`test()`函数时,...

    2021-2022计算机二级等级考试试题及答案No.16781.docx

    1. LINQ(Language Integrated Query,语言集成查询)是.NET框架的一部分,它允许程序员在C#或VB.NET等语言中直接编写数据库查询,支持查询、插入、修改等操作,但不直接支持导入数据,所以选项D是正确的。...

    2021-2022计算机二级等级考试试题及答案No.14190.docx

    6. 在VB或VB.NET中,设置Timer控件的Enabled属性为False可以禁用Timer的Timer事件。 7. FoxBase/DOS FoxPro的命令中,USE命令打开数据库,REPLACE命令替换字段值,STORE命令将值存储到字段,而?用于输出结果。根据...

    2021-2022计算机二级等级考试试题及答案No.17981.docx

    17. ASP.NET 支持的语言包括 C#、VB.NET 和 Jscript.NET。 18. 字符字型要素包括字体、风格和字号,而不包括颜色,颜色通常是视觉呈现的一部分,而非字型的基本要素。 19. 在 Visual Basic 或类似开发环境中,创建...

    2021-2022计算机二级等级考试试题及答案No.15399.docx

    14. ASP.NET支持的三种编程语言是C#、VB.NET和Jscript.NET。 15. 计算机网络的拓扑结构包括环型网、总线网和星型网,但不包括广播网,广播网络是一种通信方式,而非拓扑类型。 16. SQL查询中的子查询(id = (SELECT ...

    2021-2022计算机二级等级考试试题及答案No.18769.docx

    知识点:DOS命令基础知识,文件操作命令,TYPE命令的使用和应用。 14. 现在Internet上的电子书籍多数采用PDF格式存储和传递,这种格式的文件是用Adobe Acrobat Reader软件来打开并阅读的。 知识点:Internet基础...

    2021-2022计算机二级等级考试试题及答案No.9615.docx

    7. **目录操作**:在DOS或类似系统中,若当前目录为空,可以使用MD命令创建子目录,如MD \USER\XY\P\X\Y。 8. **输出设备**:完全属于计算机输出设备的包括打印机、绘图仪和显示器,键盘、鼠标器和扫描仪是输入设备...

    2021-2022计算机二级等级考试试题及答案No.1956.docx

    18. 键盘事件处理:在VB或VB.NET中,要在文本框按回车键后焦点自动转到下一个文本框,需要在Text1的KeyPress事件中处理。 19. Java主类的main方法:Java application的主类的main方法的返回类型是void。 20. 扩展...

    2021-2022计算机二级等级考试试题及答案No.15028.docx

    23. ASP.NET上传控件:FileUpload控件用于在ASP.NET中实现文件上传功能。 24. 字段名称命名规则:字段名称不能以数字开头,但可以包含字母、汉字、数字和下划线。 25. SELECT语句语法:正确的语法应该是`SELECT * ...

Global site tag (gtag.js) - Google Analytics