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

window

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

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

时间: 2024-08-03 04:00:54

vb.net的windows窗体实现dos命令的相关文章

用C#在本地创建一个Windows帐户(DOS命令)_C#教程

其它方法见.用C#在本地创建一个Windows帐户(DirectoryServices)  http://yaosansi.com/blog/article.asp?id=917    在WinForm下该程序可写成:   (已测试通过,需要以Administrator身份运行)       using   System;       namespace   eg       {       class     test       {       static     void     Mai

Windows下通过DOS命令登录MYSQL的方法_Mysql

例:MYSQL安装在 D:\ApacheServer\mysql 下 开始==>运行==>cmd,或者 按住win键+r键输入cmd 复制代码 代码如下: C:\Users\Administrator>d:      //进入D盘 D:\>cd ApacheServer\mysql\bin  //进入mysql安装目录下bin文件夹内 D:\ApacheServer\mysql\bin>mysql -h localhost -uroot -p    //进入mysql命令,随

Windows Dos命令 jar打包文件,jar打包文件夹

Windows Dos命令 jar打包文件,jar打包文件夹 项目上线之后,版本的迭代必不可少,但是怎么做才是规范,安全的呢? 当然原项目备份是必不可少的了: 比如我的项目名是 Wechat (我使用的tomcat服务器,所以该项目Wechat默认在 webapps 文件夹中) 首先对原项目打包:tar cvf wechat20150315.tar WeChat [root@iZ23whn33jnZ webapps]# tar cvf wechat20150315.tar WeChat WeCh

Windows Dos命令下查看端口号,杀死端口

Windows Dos命令下查看端口号,杀死端口 PS:本文以 Redis 默认端口 6379 为例 1,首先查询该端口的 pid,使用命令 [netstat -ano | findstr 端口号] F:\Program Files\Redis>netstat -ano | findstr 6379 TCP 0.0.0.0:6379 0.0.0.0:0 LISTENING 6932 TCP [::]:6379 [::]:0 LISTENING 6932 F:\Program Files\Redi

vb参数传递-VB高手请进!在线等。。——shell使用dos命令时参数的传递

问题描述 VB高手请进!在线等..--shell使用dos命令时参数的传递 怎样才能将%LOGPATH%所替代的内容传递到其中? (不要写成调用bat的形式) 解决方案 不行的,%logpath%不能包在括号里,应该这样 Shell "cmd /k mkdir "+LOGPATH+" > nul 2>&1", vbNormalNoFocus vb调用dos是直接运行引号内的,而不给某一变量赋值.另外包在百分号内的是bat变量而不是vb的变量 解决

我想做一个窗体,这里面可以像在dos命令窗下一样输入命令,并在文本域显示结果,用java该怎么写

问题描述 我想做一个窗体,这里面可以像在dos命令窗下一样输入命令,并在文本域显示结果,用java该怎么写 要效果完全跟dos一样,我试过用 rutime.getRuntime().exec(),但是有些命令可以得到正确结果,有些命令就没反应,像ping命令arp-a就可以,java,c:,dir,这些就不行,不知其中奥妙,求大神给个程序,我搜了很多感觉都不适合 解决方案 http://www.cnblogs.com/leohxj/archive/2012/11/26/2789284.html

Windows 常用DOS命令

Windows 常用DOS命令 command-name /? //显示帮助和参数用法 systeminfo   //显示系统信息,包括本次开机时间 有关进程管理 tasklist //显示进程和进程id-PID taskkill //终止进程 -f 强制结束 -pid 以pid号终止指定进程 findstr  //显示区配字符串的所在行 文件操作 cd  显示当前目录 dir 显示当前目录下的文件与目录 cls 清除屏幕 date 显示.更改日期 time 显示.更改时间 echo 回显信息

Java调用Windows的DOS命令的方法_java

这是一个使用java代码调用dos命令的实例,在这里我就不多说,直接上代码,代码如下: 复制代码 代码如下: import java.io.*; /**  *  Java调用windows的DOS命令  *  实现调用Windows的ipconfig命令,然后将输出的信息通过IO流输出到控制台.  */ public class RunWindowsCommand{     public static void main(String[] args) {         InputStream

做一个Windows窗体版的DOS分析器

//////////////////////////////////////////////////////////////////////////////////Author: stardicky ////E-mail: stardicky@hotmail.com ////QQNumber: 9531511 ////CompanyName: Ezone International ////Class: HBS-0308 ////title: 做一个Windows窗体版的DOS分析器 /////