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

快速使用VB.NET shell程序

開發(fā) 后端
這里就啟動(dòng)VB.NET shell程序,并將其輸出截獲做出了詳細(xì)的代碼分析,執(zhí)行并返回一個(gè)命令行程序(shell程序)的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出'通常命令行程序的所有輸出都直接送到屏幕上。

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

#T#通常,系統(tǒng)啟動(dòng)Shell程序時(shí)缺省給定了3個(gè)I/O信道,標(biāo)準(zhǔn)輸入(stdin),標(biāo)準(zhǔn)輸出stdout,標(biāo)準(zhǔn)錯(cuò)誤輸出stderr。之所以這么區(qū)分是因?yàn)樵谠缙诘挠?jì)算機(jī)系統(tǒng)如PDP-11的一些限制。那時(shí)沒有GUI,將輸出分為stdout,stderr可以避免程序的調(diào)試信息和正常輸出的信息混雜在一起。通常,shell程序把它們的輸出寫入標(biāo)準(zhǔn)輸出管道(stdout)、把出錯(cuò)信息寫入標(biāo)準(zhǔn)錯(cuò)誤管道(stderr)。缺省情況下,系統(tǒng)將管道的輸出直接送到屏幕,這樣一來我們就能看到應(yīng)用程序運(yùn)行結(jié)果了。為了捕獲一個(gè)標(biāo)準(zhǔn)控制臺(tái)應(yīng)用程序的輸出,我們必須把standOutput和standError管道輸出重定向到我們自定義的管道。

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

  1. PrivateFunctionExecuteApp(sCmdlineAsString)  
  2. AsStringDimprocAsPROCESS_INFORMATION,  
  3. retAsLongDimstartAsSTARTUPINFO  
  4. DimsaAsSECURITY_ATTRIBUTESDimhReadPipeAsLong'負(fù)責(zé)讀取的管道  
  5. DimhWritePipeAsLong'負(fù)責(zé)Shell程序的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出的管道  
  6. DimsOutputAsString'放返回的數(shù)據(jù)  
  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'把標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到同一個(gè)管道中去。  
  14. start.hStdOutput=hWritePipestart.hStdError=hWritePipestart.wShowWindow=SW_HIDE'隱含shell程序窗口'啟動(dòng)shell程序,sCmdLine指明執(zhí)行的路徑  
  15. ret=CreateProcessA(0&,sCmdline,sa,sa,  
  16. True,NORMAL_PRIORITY_CLASS,_0&,0&,start,proc)  
  17. Ifret=0ThenMsgBox"無法建立新進(jìn)程,錯(cuò)誤碼:  
  18. "&Err.LastDllErrorExitFunctionEndIf'本例中不必向shell程序送信息,因此可以先關(guān)閉  
  19. hWritePipeCloseHandlehWritePipe'循環(huán)讀取shell程序的輸出,每次讀取256個(gè)字節(jié)。  
  20. Doret=ReadFile(hReadPipe,sBuffer,256,lngBytesRead,0&)  
  21. sOutputsOutput=sOutput&Left$(sBuffer,lngBytesRead)LoopWhileret<>0'如果ret=0代表沒有更多的信息需要讀取了'釋放相關(guān)資源  
  22. CloseHandleproc.hProcessCloseHandleproc.hThreadCloseHandlehReadPipeExecuteApp=sOutput'輸出結(jié)果EndFunction 

我對(duì)這個(gè)程序進(jìn)行一些解釋。

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

再把VB.NET shell程序的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出都定向到我們預(yù)先建好的管道中。
代碼如下:

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

好,現(xiàn)在可以調(diào)用建立新進(jìn)程的函數(shù)了:

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


然后,循環(huán)讀管道里的數(shù)據(jù)直到無數(shù)據(jù)可讀為止。

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

然后,釋放不用的資源。

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

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

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數(shù)組

2009-11-02 15:49:23

VB.NET顯示系統(tǒng)信

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可選參數(shù)

2009-10-09 16:00:34

VB6.0開發(fā)

2009-10-26 15:57:07

VB.NET使用Ora

2009-11-03 13:48:02

VB.NET枚舉

2009-10-10 15:43:51

2009-10-14 17:08:44

VB.NET使用Fil

2010-01-11 16:04:10

VB.NET使用wit

2009-11-10 16:55:05

VB.NET調(diào)用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界面

2009-10-20 10:29:30

VB.NET使用Sor

2009-10-13 15:20:02

VB.NET使用Dra
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品一区二区电影 | 久久伊人精品一区二区三区 | 亚洲一区 中文字幕 | h在线免费观看 | 久久国产精品免费一区二区三区 | 国产精品久久久久久久久久久久久久 | 91色网站| 国产精品99久久久久久宅男 | 日韩视频免费 | 欧美精品一区二区三区在线播放 | 国产精品毛片无码 | 免费观看黄a一级视频 | 91免费在线视频 | www.午夜| 国产a区 | 亚洲精品成人在线 | 日韩欧美高清dvd碟片 | 国产成人精品在线播放 | 欧美a v在线 | 婷婷免费在线 | 91精产国品一二三区 | аⅴ资源新版在线天堂 | 久久99精品久久久久久国产越南 | 欧美日韩福利视频 | 国产一区二区精品在线 | 亚洲影音 | 国产精品视频专区 | 夜夜操天天操 | 玖草资源 | 国产成人精品免费视频大全最热 | 中国av在线免费观看 | 国产一区二区三区视频 | 美女久久| 亚洲电影一区二区三区 | 一区二区在线免费观看 | 亚洲欧洲视频 | 羞羞的视频在线看 | 日韩一区二区三区在线看 | 国产亚洲欧美在线 | av高清毛片 | 欧美 日韩 国产 成人 在线 |