用VB將命令行軟件Windows化
發表于:2007-07-14來源:作者:點擊數:
標簽:
劉強 有很多深受歡迎的軟件,如ARJ,UNDISK等都是在DOS環境下以命令行的形式出現的。其特點就是依靠大量的參數和開關變量來實現其豐富的功能。利用Visual Basic可以簡單地把此類軟件改寫成 WINDOWS 版本,其中大量的開關參數可用菜單、列表框、組合框和復選框
劉強
有很多深受歡迎的軟件,如ARJ,UNDISK等都是在DOS環境下以命令行的形式出現的。其特點就是依靠大量的參數和開關變量來實現其豐富的功能。利用Visual Basic可以簡單地把此類軟件改寫成
WINDOWS版本,其中大量的開關參數可用菜單、列表框、組合框和復選框等一一映射成圖形界面。而命令的調用??梢杂?STRONG>
VB提供的SHELL函數,其語法為:
shell(命令字符串[,窗口風格])
如以下VB小程序:
Sub Command3D1_Click ()
Dim x
x = Shell("c: oolsarj.exe a a:demo c:demo*.*")
End Sub
但使用SHELL函數 會出現WINDOWS界面和DOS黑色界面的突然切換,顯得不美觀。如何解決這個問題呢?使用WINDOWS的API函數WinExec,可以在隱含的窗體中啟動應用程序,使命令行程序完全在后臺執行。下面給出一例,將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輸入參數,text1,text2輸入文件路徑
hWnd = WinExec(cmdline, 0) ’參數為0則隱藏窗體
If HWND $#@60; 32 Then ’hWin$#@60;32則啟動應用程序失敗
MsgBox "error!"
Exit Sub
End If
While GetModuleUsage(HWND%)
mousepointer = 11 ‘鼠標呈沙漏狀
WAIT% = DoEvents()
Wend
mousepointer = 1 ’鼠標復原為箭頭
End Sub
在此例中,筆者使用了WINDOWS的PIF編輯器將ARJ.EXE編輯成ARJ.PIF,是因為類似ARJ這樣的軟件是以全屏方式執行的,而WINEXEC函數只能隱藏以窗體方式運行的程序。在編輯PIF文件時顯示方式選擇“窗口”,執行方式選擇“后臺”,這樣就解決了上面提到的界面突換的問題。而調用API函數GetModuleUsage以獲得應用程序結束的標志,若運行完畢則返回TRUE,若未運行完畢則讓出CPU控制權,為運行ARJ提供時機。這樣的小程序完全可以實現命令行軟件的WINDOWS化,而且運行起來真假難辨,有興趣的讀者不妨試一試。
原文轉自:http://www.anti-gravitydesign.com