shell(命令字符串[,窗口風(fēng)格])
如以下VB小程序:
Sub Command3D1_Click ()
Dim x
x = Shell("c: oolsarj.exe a a:demo c:demo*.*")
End Sub
但使用SHELL函數(shù) 會出現(xiàn)WINDOWS界面和DOS黑色界面的突然切換,顯得不美觀。如何解決這個問題呢?使用WINDOWS的API函數(shù)WinExec,可以在隱含的窗體中啟動應(yīng)用程序,使命令行程序完全在后臺執(zhí)行。下面給出一例,將ARJ完全WINDOWS化,其效果完全可以亂真。
Sub Command1_Click ( )
Dim cmd As String
Dim hWnd As Integer
cmd = "c:dosARJ.pif " & list1.Text & " -" & LIST2.Text &
" " & text2.Text & " " & text1.Text ’list1、list2輸入?yún)?shù),text1,text2輸入文件路徑
hWnd = WinExec(cmdline, 0) ’參數(shù)為0則隱藏窗體
If HWND $#@60; 32 Then ’hWin$#@60;32則啟動應(yīng)用程序失敗
MsgBox "error!"
Exit Sub
End If
While GetModuleUsage(HWND%)
mousepointer = 11 ‘鼠標(biāo)呈沙漏狀
WAIT% = DoEvents()
Wend
mousepointer = 1 ’鼠標(biāo)復(fù)原為箭頭
End Sub
在此例中,筆者使用了WINDOWS的PIF編輯器將ARJ.EXE編輯成ARJ.PIF,是因為類似ARJ這樣的軟件是以全屏方式執(zhí)行的,而WINEXEC函數(shù)只能隱藏以窗體方式運(yùn)行的程序。在編輯PIF文件時顯示方式選擇“窗口”,執(zhí)行方式選擇“后臺”,這樣就解決了上面提到的界面突換的問題。而調(diào)用API函數(shù)GetModuleUsage以獲得應(yīng)用程序結(jié)束的標(biāo)志,若運(yùn)行完畢則返回TRUE,若未運(yùn)行完畢則讓出CPU控制權(quán),為運(yùn)行ARJ提供時機(jī)。這樣的小程序完全可以實現(xiàn)命令行軟件的WINDOWS化,而且運(yùn)行起來真假難辨,有興趣的讀者不妨試一試。