成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

快速使用VB.NET shell程序

開發 后端
這里就啟動VB.NET shell程序,并將其輸出截獲做出了詳細的代碼分析,執行并返回一個命令行程序(shell程序)的標準輸出和標準錯誤輸出'通常命令行程序的所有輸出都直接送到屏幕上。

VB.NET經過長時間的發展,很多用戶都很了解VB.NET了,這里我發表一下個人理解,和大家討論討論。在Windows環境下的所謂shell程序就是dos命令行程序,比如VC的CL.exe命令行編譯器,JDK的javac編譯器,啟動java程序用的java.exe都是標準的shell程序。截獲一個shell程序的輸出是很有用的,比如說您可以自己編寫一個IDE(集成開發環境),當用戶發出編譯指令時候,你可以在后臺啟動shell調用編譯器并截獲它們的輸出,對這些輸出信息進行分析后在更為友好的用戶界面上顯示出來。為了方便起見,我們用VB作為本文的演示語言。

#T#通常,系統啟動Shell程序時缺省給定了3個I/O信道,標準輸入(stdin),標準輸出stdout,標準錯誤輸出stderr。之所以這么區分是因為在早期的計算機系統如PDP-11的一些限制。那時沒有GUI,將輸出分為stdout,stderr可以避免程序的調試信息和正常輸出的信息混雜在一起。通常,shell程序把它們的輸出寫入標準輸出管道(stdout)、把出錯信息寫入標準錯誤管道(stderr)。缺省情況下,系統將管道的輸出直接送到屏幕,這樣一來我們就能看到應用程序運行結果了。為了捕獲一個標準控制臺應用程序的輸出,我們必須把standOutput和standError管道輸出重定向到我們自定義的管道。

下面的代碼可以啟動一個VB.NET shell程序,并將其輸出截獲。執行并返回一個命令行程序(shell程序)的標準輸出和標準錯誤輸出'通常命令行程序的所有輸出都直接送到屏幕上

  1. PrivateFunctionExecuteApp(sCmdlineAsString)  
  2. AsStringDimprocAsPROCESS_INFORMATION,  
  3. retAsLongDimstartAsSTARTUPINFO  
  4. DimsaAsSECURITY_ATTRIBUTESDimhReadPipeAsLong'負責讀取的管道  
  5. DimhWritePipeAsLong'負責Shell程序的標準輸出和標準錯誤輸出的管道  
  6. DimsOutputAsString'放返回的數據  
  7. DimlngBytesReadAsLong,  
  8. sBufferAsString*256sa.nLength=Len(sa)  
  9. sa.bInheritHandle=Trueret=CreatePipe(hReadPipe,  
  10. hWritePipe,sa,0)Ifret=0ThenMsgBox 
  11. "CreatePipefailed.Error:"&Err.LastDllErrorExitFunction  
  12. EndIfstart.cb=Len(start)  
  13. start.dwFlags=STARTF_USESTDHANDLESOrSTARTF_USESHOWWINDOW'把標準輸出和標準錯誤輸出重定向到同一個管道中去。  
  14. start.hStdOutput=hWritePipestart.hStdError=hWritePipestart.wShowWindow=SW_HIDE'隱含shell程序窗口'啟動shell程序,sCmdLine指明執行的路徑  
  15. ret=CreateProcessA(0&,sCmdline,sa,sa,  
  16. True,NORMAL_PRIORITY_CLASS,_0&,0&,start,proc)  
  17. Ifret=0ThenMsgBox"無法建立新進程,錯誤碼:  
  18. "&Err.LastDllErrorExitFunctionEndIf'本例中不必向shell程序送信息,因此可以先關閉  
  19. hWritePipeCloseHandlehWritePipe'循環讀取shell程序的輸出,每次讀取256個字節。  
  20. Doret=ReadFile(hReadPipe,sBuffer,256,lngBytesRead,0&)  
  21. sOutputsOutput=sOutput&Left$(sBuffer,lngBytesRead)LoopWhileret<>0'如果ret=0代表沒有更多的信息需要讀取了'釋放相關資源  
  22. CloseHandleproc.hProcessCloseHandleproc.hThreadCloseHandlehReadPipeExecuteApp=sOutput'輸出結果EndFunction 

我對這個程序進行一些解釋。

  1. ret=CreatePipe(hReadPipe,hWritePipe,sa,0) 

再把VB.NET shell程序的標準輸出和標準錯誤輸出都定向到我們預先建好的管道中。
代碼如下:

  1. start.dwFlags=STARTF_USESTDHANDLESOrSTARTF_USESHOWWINDOW 
  2. start.hStdOutput=hWritePipe 
  3. start.hStdError=hWritePipe 

好,現在可以調用建立新進程的函數了:

  1. ret=CreateProcessA(0&,sCmdline,sa,sa,True,NORMAL_PRIORITY_CLASS,0&,0&,start,proc) 


然后,循環讀管道里的數據直到無數據可讀為止。

  1. Do  
  2. ret=ReadFile(hReadPipe,sBuffer,256,lngBytesRead,0&)'每次讀256字節  
  3. sOutputsOutput=sOutput&Left$(sBuffer,lngBytesRead)'送入一個字符串中  
  4. LoopWhileret<>0'若ret=0表明沒有數據等待讀取。  

然后,釋放不用的資源。

VB.NET shell程序用法很簡單:比如:

  1. MsgBoxExecuteApp("c:\windows\command\mem.exe) 
責任編輯:田樹 來源: 博客
相關推薦

2009-10-21 09:40:23

VB.NET搜索

2009-10-28 15:01:59

VB.NET SHEL

2009-11-02 17:54:44

VB.NET數組

2009-11-02 15:49:23

VB.NET顯示系統信

2009-10-09 16:11:33

VB.NET語法

2009-10-30 13:31:06

VB.NET名空間

2009-11-02 12:35:10

VB.NET追加文件

2009-10-28 13:23:52

VB.NET可選參數

2009-10-09 16:00:34

VB6.0開發

2009-11-03 13:48:02

VB.NET枚舉

2009-10-26 15:57:07

VB.NET使用Ora

2009-10-14 17:08:44

VB.NET使用Fil

2010-01-11 16:04:10

VB.NET使用wit

2009-10-10 15:43:51

2009-11-10 16:55:05

VB.NET調用API

2009-10-27 11:03:16

VB.NET文件夾操作

2010-01-18 10:13:08

VB.NET獲取CPU

2009-11-03 11:27:30

VB.NET界面

2010-01-18 18:20:49

VB.NET使用API

2009-10-09 14:55:02

VB.NET數組
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩视频在线免费观看 | 久操伊人 | 中文字幕一区二区三区在线观看 | 国产一级一级国产 | 干狠狠| 激情久久网| 日韩av黄色| 午夜视频免费在线观看 | 91麻豆精品国产91久久久更新资源速度超快 | 国产目拍亚洲精品99久久精品 | 男女污污动态图 | 在线观看国产网站 | 久草在线视频中文 | 日韩欧美中文字幕在线观看 | 久久久成人一区二区免费影院 | 日韩免费高清视频 | 99re66在线观看精品热 | 国产成人精品久久二区二区91 | 国产天天操 | 伊人网站在线 | 精品国产一区二区国模嫣然 | 成人国产精品久久久 | 一区二区三区小视频 | 日本免费网 | 在线中文一区 | 亚洲精品一二区 | 日韩精品成人 | 一区二区精品 | 91视频入口| 中文字幕亚洲免费 | 极品国产视频 | 伊人焦久影院 | 视频一区在线观看 | 精品一区二区三区四区外站 | 性生活毛片 | 高清视频一区二区三区 | 九九亚洲 | 完全免费在线视频 | caoporn免费 | 综合精品久久久 | 亚洲欧美日韩一区二区 |