6 个解决方案
#1
使用PIPE重定向:
示例为测试ping远程IP,telnet同理
1、单线程实现
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.Text = "Processing..."
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
P.WaitForExit(60000)
Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
P.Close()
RichTextBox1.Text = S.Replace(Chr(13), "")
End Sub
2、跨线程实现
Delegate Sub SetTextCallback(ByVal [text] As String) '声明委托,为跨线程调用控件
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim T As New Threading.Thread(New Threading.ThreadStart(AddressOf run))
RichTextBox1.Text = "Processing..."
T.Start()
End Sub
Private Sub run()
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
P.WaitForExit(60000)
Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
P.Close()
Me.SetText(S.Replace(Chr(13), ""))
End Sub
Private Sub SetText(ByVal [text] As String)
'实现线程安全调用,查询控件的 InvokeRequired 属性。
'如果 InvokeRequired 返回 true,则使用实际调用控件的委托来调用 Invoke。
'如果 InvokeRequired 返回 false,则直接调用控件。
If Me.RichTextBox1.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.RichTextBox1.Text = [text]
End If
End Sub
示例为测试ping远程IP,telnet同理
1、单线程实现
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.Text = "Processing..."
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
P.WaitForExit(60000)
Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
P.Close()
RichTextBox1.Text = S.Replace(Chr(13), "")
End Sub
2、跨线程实现
Delegate Sub SetTextCallback(ByVal [text] As String) '声明委托,为跨线程调用控件
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim T As New Threading.Thread(New Threading.ThreadStart(AddressOf run))
RichTextBox1.Text = "Processing..."
T.Start()
End Sub
Private Sub run()
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
P.WaitForExit(60000)
Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
P.Close()
Me.SetText(S.Replace(Chr(13), ""))
End Sub
Private Sub SetText(ByVal [text] As String)
'实现线程安全调用,查询控件的 InvokeRequired 属性。
'如果 InvokeRequired 返回 true,则使用实际调用控件的委托来调用 Invoke。
'如果 InvokeRequired 返回 false,则直接调用控件。
If Me.RichTextBox1.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.RichTextBox1.Text = [text]
End If
End Sub
#2
谢谢,我试过了,ping 的确可以,但是telnet不行,没有结果输出呀
Microsoft Windows [版本 6.0.6001]
版权所有 (C) 2006 Microsoft Corporation。保留所有权利。
C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>telnet 10.40.64.1
C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>exit
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.Text = "Processing..."
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("telnet 10.40.64.1") ' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
P.WaitForExit(60000)
Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
P.Close()
RichTextBox1.Text = S.Replace(Chr(13), "")
End Sub
Microsoft Windows [版本 6.0.6001]
版权所有 (C) 2006 Microsoft Corporation。保留所有权利。
C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>telnet 10.40.64.1
C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>exit
#3
学习
#4
顶
#5
关注中
#6
WINDOWS的telnet不支持管道操作,所以不行,如果要用这种方法的话可以找一个支持管道的TELNET程序
#1
使用PIPE重定向:
示例为测试ping远程IP,telnet同理
1、单线程实现
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.Text = "Processing..."
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
P.WaitForExit(60000)
Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
P.Close()
RichTextBox1.Text = S.Replace(Chr(13), "")
End Sub
2、跨线程实现
Delegate Sub SetTextCallback(ByVal [text] As String) '声明委托,为跨线程调用控件
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim T As New Threading.Thread(New Threading.ThreadStart(AddressOf run))
RichTextBox1.Text = "Processing..."
T.Start()
End Sub
Private Sub run()
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
P.WaitForExit(60000)
Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
P.Close()
Me.SetText(S.Replace(Chr(13), ""))
End Sub
Private Sub SetText(ByVal [text] As String)
'实现线程安全调用,查询控件的 InvokeRequired 属性。
'如果 InvokeRequired 返回 true,则使用实际调用控件的委托来调用 Invoke。
'如果 InvokeRequired 返回 false,则直接调用控件。
If Me.RichTextBox1.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.RichTextBox1.Text = [text]
End If
End Sub
示例为测试ping远程IP,telnet同理
1、单线程实现
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.Text = "Processing..."
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
P.WaitForExit(60000)
Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
P.Close()
RichTextBox1.Text = S.Replace(Chr(13), "")
End Sub
2、跨线程实现
Delegate Sub SetTextCallback(ByVal [text] As String) '声明委托,为跨线程调用控件
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim T As New Threading.Thread(New Threading.ThreadStart(AddressOf run))
RichTextBox1.Text = "Processing..."
T.Start()
End Sub
Private Sub run()
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("ping 127.0.0.1") ' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
P.WaitForExit(60000)
Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
P.Close()
Me.SetText(S.Replace(Chr(13), ""))
End Sub
Private Sub SetText(ByVal [text] As String)
'实现线程安全调用,查询控件的 InvokeRequired 属性。
'如果 InvokeRequired 返回 true,则使用实际调用控件的委托来调用 Invoke。
'如果 InvokeRequired 返回 false,则直接调用控件。
If Me.RichTextBox1.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.RichTextBox1.Text = [text]
End If
End Sub
#2
谢谢,我试过了,ping 的确可以,但是telnet不行,没有结果输出呀
Microsoft Windows [版本 6.0.6001]
版权所有 (C) 2006 Microsoft Corporation。保留所有权利。
C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>telnet 10.40.64.1
C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>exit
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.Text = "Processing..."
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("telnet 10.40.64.1") ' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
P.WaitForExit(60000)
Dim S As String = P.StandardOutput.ReadToEnd() ' 得到cmd.exe的输出
P.Close()
RichTextBox1.Text = S.Replace(Chr(13), "")
End Sub
Microsoft Windows [版本 6.0.6001]
版权所有 (C) 2006 Microsoft Corporation。保留所有权利。
C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>telnet 10.40.64.1
C:\Users\aaa\Documents\Visual Studio 2005\Projects\Ping2008\Ping2008\bin\Debug>exit
#3
学习
#4
顶
#5
关注中
#6
WINDOWS的telnet不支持管道操作,所以不行,如果要用这种方法的话可以找一个支持管道的TELNET程序