VB.NET SendKeys方法與鍵入值
VB.NET有很多值得學(xué)習(xí)的地方,這里我們主要介紹VB.NET SendKeys方法,包括介紹控制過程輸入輸出等方面。
有時(shí)候,你可能不僅僅想使用簡(jiǎn)單的命令行,而是想把更復(fù)雜的輸入信息直接發(fā)送到啟動(dòng)的過程中。前面例子中的把輸出導(dǎo)入到文件中的方法,并不總是最好的選擇。在許多情況下,把輸出直接導(dǎo)回你的應(yīng)用程序可能更有效。對(duì)于使用StdIn、StdOut和StdErr的程序,比如控制臺(tái)應(yīng)用程序,你可以覆蓋默認(rèn)方法,提供一個(gè)StreamWriter來輸入,并提供一個(gè)StreamReaders來讀取StdOut和StdErr輸出值。當(dāng)你啟動(dòng)過程的時(shí)候,你需要設(shè)置ProcessStartInfo對(duì)象的RedirectStandardInput、RedirectStandardOutput和 RedirectStandardError屬性為True。然后,在啟動(dòng)過程之后,使用Process對(duì)象的StandardInput、StandardOutput和StandardError屬性來把輸入輸出流分配到StreamReader和StreamWriter對(duì)象。
警告:默認(rèn)情況下,框架使用Win32 ShellExecute函數(shù),在內(nèi)部啟動(dòng)過程;但是當(dāng)你想再分配輸入輸出流的時(shí)候,你必須在啟動(dòng)過程之前設(shè)置 ProcessStartInfo.UseShellExecute屬性為False。注意當(dāng)你那么做的時(shí)候,你必須要么指定到文件的完全路徑,要么文件位置必須在環(huán)境路徑中。例如,下面的代碼創(chuàng)建一個(gè)不可見的窗口,取得系統(tǒng)目錄中.com文件的目錄列表,然后在一個(gè)消息框中顯示結(jié)果。
- Dim myProcess As Process = New Process()
- Dim s As String
- myProcess.StartInfo.FileName = "cmd.exe"
- myProcess.StartInfo.UseShellExecute = False
- myProcess.StartInfo.CreateNoWindow = True
- myProcess.StartInfo.RedirectStandardInput = True
- myProcess.StartInfo.RedirectStandardOutput = True
- myProcess.StartInfo.RedirectStandardError = True
- myProcess.Start()
- Dim sIn As StreamWriter = myProcess.StandardInput
- sIn.AutoFlush = True
- Dim sOut As StreamReader = myProcess.StandardOutput
- Dim sErr As StreamReader = myProcess.StandardError
- sIn.Write("dir c:\Windows\system32\*.com" & _
- System.Environment.NewLine)
- sIn.Write("exit" & System.Environment.NewLine)
- s = sOut.ReadToEnd()
- If Not myProcess.HasExited Then
- myProcess.Kill()
- End If
- MessageBox.Show("The 'dir' command window was " & _
closed at: " & myProcess.ExitTime & "." & _
System.Environment.NewLine & "Exit Code: " & _ myProcess.ExitCode)- sIn.Close()
- sOut.Close()
- sErr.Close()
- myProcess.Close()
- MessageBox.Show(s)
對(duì)于不使用StdIn的程序,你可以使用VB.NET SendKeys方法來輸入按鍵事件。例如,下面這些代碼啟動(dòng)記事本并輸入一些文本。
- Dim myProcess As Process = New Process()
- myProcess.StartInfo.FileName = "notepad"
- myProcess.StartInfo.WindowStyle = _
- ProcessWindowStyle.Normal
- myProcess.EnableRaisingEvents = True
- AddHandler myProcess.Exited, _
- AddressOf Me.SendKeysTestExited
- myProcess.Start()
- myProcess.WaitForInputIdle(1000)
- If myProcess.Responding Then
- System.Windows.Forms.SendKeys.SendWait( _
- "This text was entered using the " & _
- "System.Windows.Forms.SendKeys method.")
- Else
- myProcess.Kill()
- End If
你可以使用VB.NET SendKeys方法發(fā)送任何鍵入值,包括Alt、Ctrl和Shift鍵;所以,你可以使用它來保存或載入文件、退出或者執(zhí)行其他菜單驅(qū)動(dòng)的命令。然而、VB.NET SendKeys方法只發(fā)送鍵入值到活動(dòng)窗口(就是有焦點(diǎn)的那個(gè)窗口),所以如果一個(gè)應(yīng)用程序在這個(gè)過程中失去焦點(diǎn),那么可能會(huì)出現(xiàn)問題。
【編輯推薦】