有很多深受歡迎的軟件,如ARJ,UNDISK等都是在DOS環境下以命令行的形式出現的。其特點就是依靠大量的參數和開關變量來實現其豐富的功能。利用VisualBasic可以簡單地把此類軟件改寫成WINDOWS版本,其中大量的開關參數可用菜單、列表框、組合框和復選框等一一映射成圖形界面。而命令的調用。可以用VB提供的SHELL函數,其語法為:
shell(命令字符串[,窗口風格])
如以下VB小程序:
SubCommand3D1_Click()
Dimx
x=Shell("c:oolsarj.exeaa:democ:demo*.*")
EndSub
但使用SHELL函數會出現WINDOWS界面和DOS黑色界面的突然切換,顯得不美觀。如何解決這個問題呢?使用WINDOWS的API函數WinExec,可以在隱含的窗體中啟動應用程序,使命令行程序完全在後台執行。下面給出一例,將ARJ完全WINDOWS化,其效果完全可以亂真。
SubCommand1_Click()
DimcmdAsString
DimhWndAsInteger
cmd="c:dosARJ.pif"&list1.Text&"-"&LIST2.Text&
""&text2.Text&""&text1.Text'list1、list2輸入參數,text1,text2輸入文件路徑
hWnd=WinExec(cmdline,0)'參數為0則隱藏窗體
IfHWND<32Then'hWin<32則啟動應用程序失敗
MsgBox"error!"
ExitSub
EndIf
WhileGetModuleUsage(HWND)
mousepointer=11‘鼠標呈沙漏狀
WAIT=DoEvents()
Wend
mousepointer=1'鼠標復原為箭頭
EndSub
在此例中,筆者使用了WINDOWS的PIF編輯器將ARJ.EXE編輯成ARJ.PIF,是因為類似ARJ這樣的軟件是以全屏方式執行的,而WINEXEC函數只能隱藏以窗體方式運行的程序。在編輯PIF文件時顯示方式選擇“窗口”,執行方式選擇“後台”,這樣就解決了上面提到的界面突換的問題。而調用API函數GetModuleUsage以獲得應用程序結束的標志,若運行完畢則返回TRUE,若未運行完畢則讓出CPU控制權,為運行ARJ提供時機。這樣的小程序完全可以實現命令行軟件的WINDOWS化,而且運行起來真假難辨,有興趣的讀者不妨試一試。->