VB.NET SendKeys方法与键入值

开发 后端
这里介绍VB.NET SendKeys方法,包括介绍使用StdIn、StdOut和StdErr的程序,比如控制台应用程序,你可以覆盖默认方法,提供一个StreamWriter来输入,并提供一个StreamReaders来读取StdOut和StdErr输出值。

VB.NET有很多值得学习的地方,这里我们主要介绍VB.NET SendKeys方法,包括介绍控制过程输入输出等方面。

有时候,你可能不仅仅想使用简单的命令行,而是想把更复杂的输入信息直接发送到启动的过程中。前面例子中的把输出导入到文件中的方法,并不总是最好的选择。在许多情况下,把输出直接导回你的应用程序可能更有效。对于使用StdIn、StdOut和StdErr的程序,比如控制台应用程序,你可以覆盖默认方法,提供一个StreamWriter来输入,并提供一个StreamReaders来读取StdOut和StdErr输出值。当你启动过程的时候,你需要设置ProcessStartInfo对象的RedirectStandardInput、RedirectStandardOutput和 RedirectStandardError属性为True。然后,在启动过程之后,使用Process对象的StandardInput、StandardOutput和StandardError属性来把输入输出流分配到StreamReader和StreamWriter对象。

警告:默认情况下,框架使用Win32 ShellExecute函数,在内部启动过程;但是当你想再分配输入输出流的时候,你必须在启动过程之前设置 ProcessStartInfo.UseShellExecute属性为False。注意当你那么做的时候,你必须要么指定到文件的完全路径,要么文件位置必须在环境路径中。例如,下面的代码创建一个不可见的窗口,取得系统目录中.com文件的目录列表,然后在一个消息框中显示结果。

  1. Dim myProcess As Process = New Process()  
  2. Dim s As String  
  3. myProcess.StartInfo.FileName = "cmd.exe" 
  4. myProcess.StartInfo.UseShellExecute = False 
  5. myProcess.StartInfo.CreateNoWindow = True 
  6. myProcess.StartInfo.RedirectStandardInput = True 
  7. myProcess.StartInfo.RedirectStandardOutput = True 
  8. myProcess.StartInfo.RedirectStandardError = True 
  9. myProcess.Start()  
  10. Dim sIn As StreamWriter = myProcess.StandardInput  
  11. sIn.AutoFlush = True 
  12.  
  13. Dim sOut As StreamReader = myProcess.StandardOutput  
  14. Dim sErr As StreamReader = myProcess.StandardError  
  15. sIn.Write("dir c:\Windows\system32\*.com" & _  
  16. System.Environment.NewLine)  
  17. sIn.Write("exit" & System.Environment.NewLine)  
  18. s = sOut.ReadToEnd()  
  19. If Not myProcess.HasExited Then  
  20. myProcess.Kill()  
  21. End If  
  22.  
  23. MessageBox.Show("The 'dir' command window was " & _  
    closed at: " & myProcess.ExitTime & "." & _  
    System.Environment.NewLine & "Exit Code: " & _  myProcess.ExitCode)  
  24.  
  25. sIn.Close()  
  26. sOut.Close()  
  27. sErr.Close()  
  28. myProcess.Close()  
  29. MessageBox.Show(s) 

对于不使用StdIn的程序,你可以使用VB.NET SendKeys方法来输入按键事件。例如,下面这些代码启动记事本并输入一些文本。

  1. Dim myProcess As Process = New Process()  
  2. myProcess.StartInfo.FileName = "notepad" 
  3. myProcess.StartInfo.WindowStyle = _ 
  4. ProcessWindowStyle.Normal  
  5. myProcess.EnableRaisingEvents = True 
  6. AddHandler myProcess.Exited, _  
  7. AddressOf Me.SendKeysTestExited  
  8. myProcess.Start()  
  9.  
  10. myProcess.WaitForInputIdle(1000)  
  11. If myProcess.Responding Then  
  12. System.Windows.Forms.SendKeys.SendWait( _  
  13. "This text was entered using the " & _  
  14. "System.Windows.Forms.SendKeys method.")  
  15. Else  
  16. myProcess.Kill()  
  17. End If  

你可以使用VB.NET SendKeys方法发送任何键入值,包括Alt、Ctrl和Shift键;所以,你可以使用它来保存或载入文件、退出或者执行其他菜单驱动的命令。然而、VB.NET SendKeys方法只发送键入值到活动窗口(就是有焦点的那个窗口),所以如果一个应用程序在这个过程中失去焦点,那么可能会出现问题。

【编辑推荐】

  1. 简单讲述VB.NET表间拖放
  2. 五分钟学会VB.NET实现拖放
  3. 讲述强大的VB.NET Web Forms,使用起来却如此简单
  4. 分析VB QuickSort应用程序
  5. 两步就可以掌握VB使用ArrayList类
责任编辑:佚名 来源: IT168
相关推荐

2010-01-13 11:11:42

VB.NET Date

2009-11-03 09:26:13

VB.NET方法

2010-01-22 11:15:50

VB.NET固定值变量

2010-01-07 15:25:11

VB.NET数组

2009-10-14 16:46:25

VB.NET OnSt

2010-01-21 10:48:18

VB.NET扩展方法

2009-11-03 10:51:33

VB.NET共享

2009-10-27 11:32:42

VB.NET Disp

2010-01-21 16:37:56

VB.NET变量声明

2009-11-03 10:00:20

VB.NET New方

2010-01-22 10:41:33

VB.NET声明结构

2009-10-30 15:37:23

VB.NET Sub创

2009-11-10 12:42:47

VB.NET Prin

2009-10-13 15:20:02

VB.NET使用Dra

2009-10-16 15:06:13

VB.NET组合时间值

2009-10-23 12:53:25

VB.NET语言

2010-01-22 15:56:03

VB.NET获取当前U

2010-01-21 17:58:40

VB.NET List

2010-01-15 19:17:23

2010-01-18 18:06:07

VB.NET多线程
点赞
收藏

51CTO技术栈公众号