VB==快速調用系統對話框(全)


(作者:甘冀平 2000年12月21日 17:46)

  Windows系統給我們提供了許多非常實用的功能,而且都是以對話框的形式展現在用戶眼前,比如:查找文件、瀏覽選擇後執行程序,等等 ... 如果我們能在程序中以簡練的代碼快速調用它們,就可以移花接木般地達到需要的目的。這樣,既省卻了再次編寫繁瑣代碼的過程,又能讓程序快速執行(調用系統內核模塊,能不快嗎^_^)。以下就列舉幾個這樣的例子:  

  ●快速調用“查找文件對話框”

  ●快速調用“系統重新啓動對話框”

  ●快速調用“程序運行對話框”

  ●快速調用“文件屬性對話框”

  ●快速調用“軟盤格式化對話框”

  ●快速調用“網絡資源映射對話框”

  ●快速調用“查找文件對話框”

快速調用“查找文件對話框”
  在Windows環境中,如果要查找一個文件,通常情況下采取的步驟是:

  1、確定查找文件所在的文件夾範圍

  2、按熱鍵F3

  3、在出現的“查找:所有文件”窗口中,輸入各個項目。

01.gif
  是不是有點複雜。在VB程序中,能否通過點擊一個按鈕,就出現第3步的“查找:所有文件”?答案是肯定的!代碼如下:

  '聲明API函數

  Declare Function ShellExecute Lib "shell32.dll" Alias _

    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _

    As String, ByVal lpFile As String, ByVal lpParameters _

    As String, ByVal lpDirectory As String, ByVal nShowCmd _

    As Long) As Long

  '定義常量參數

  Const SW_SHOW = 5

  '通用調用查找對話框函數

  Public Sub ShowFindDialog(Optional InitialDirectory As String)

  ShellExecute 0, "find", _

   IIf(InitialDirectory = "", "", InitialDirectory), _

   vbNullString, vbNullString, SW_SHOW

  End Sub

  '調用查找對話框例程

  Call ShowFindDialog("C:/Program Files")

  調用的代碼ShowFindDialog("C:/Program Files"),非常簡練。注意:如果括號中的參數不是一個合法的目錄名,這一行調用命令將不會產生任何結果。如果參數爲空,就等於選擇了當前目錄。

快速調用“系統重新啓動對話框”
  我們在安裝應用軟件時,經常遇到安裝結束時要求用戶重新啓動機器的確認對話框,這時系統將根據用戶的選擇重新啓動,或者暫時退出安裝,等待用戶手工重新啓動機器。其實,在我們的應用程序中,可以用很少的代碼就調用出系統本身的重新啓動對話框,真的是非常的快捷!代碼是:

  '聲明API函數

  Private Declare Function SHRestartSystemMB Lib _

  "shell32" Alias "#59" (ByVal hOwner As Long, ByVal _

  sExtraPrompt As String, ByVal uFlags As Long) As Long

  '定義系統重新啓動常量參數

  Private Const SystemChangeRestart = 4

  '通用系統啓動過程

  Public Sub SettingsChanged(FormName As Form)

    SHRestartSystemMB FormName.hWnd, vbNullString, SystemChangeRestart

  End Sub

  '調用例程

  SettingsChanged Form1

  運行一下,看看實際的效果圖:

04.gif
  直接使用系統內在的功能,省得自己去繪製表單了,不僅實現的功能可以很嚴謹,而且樣子還很專業呢!

快速調用“程序運行對話框”
  一般情況下,當我們需要在VB程序中調用一個外部.exe或者.com程序時,一般要用到shell命令。它提供了一種非常簡捷的方式讓我們執行一個確定的外部程序。但缺點也顯現出了,就是它不提供用戶選擇執行程序的功能。你也許還記得這樣的經歷:我們用鼠標點擊桌面左小角的“開始”,在選擇“運行”,這時,就出現了一個“運行”對話框:

02.gif
  你可以在這裏直接輸入要執行的程序全路徑,或者,點擊“瀏覽”按鈕,選擇一個程序。

  要達到同樣的效果,請使用下面的代碼:

  '聲明API函數

  '引用了未公開的DLL文件shell32

  Private Declare Function SHRunDialog Lib "shell32" _

    Alias "#61" (ByVal hOwner As Long, ByVal UnknownP1 _

    As Long, ByVal UnknownP2 As Long, ByVal szTitle _

    As String, ByVal szPrompt As String, ByVal uFlags _

    As Long) As Long

  '通用調用運行對話框過程

  '參數Title表示對話框的標題,參數Description表示對話框中的描述文字

  Public Sub ShowRunDialog(ByRef CallingForm As Form, _

    Optional Title As String, _

    Optional Description As String)

    If Title = "" Then Title = "Run"

    If Description = "" Then Description = _

    "Type the name of a program to open, " & _

      "then click OK when finished."

    SHRunDialog CallingForm.hWnd, 0, 0, _

      Title, Description, 0

  End

  '調用例程

  Call ShowRunDialog(Me, "Run Dialog", "Choose a program and press OK")

  怎麼樣,輸入完以上代碼了嗎?執行一下看看效果,是不是很滿意:

03.gif
快速調用“文件屬性對話框”
  爲了查看一個文件的大小、創建時間、存取屬性(只讀、歸檔、隱藏)等等情況,採取的步驟一般是:

  1、定位文件

  2、用鼠標右鍵單擊文件

  3、在出現的菜單中選擇“屬性”

  這時,就出現了文件屬性對話框。比如,對於c:/autoexec.bat實施上面的操作後,圖示如下:

05.gif
  這時,我們就能對它的各種屬性值進行修改。

  在VB開發中,爲了實現上面的功能,要應用到ShellExecuteEX函數,具體如下:

  '聲明結構變量

  Private Type SHELLEXECUTEINFO

    cbSize As Long

    fMask As Long

    hwnd As Long

    lpVerb As String

    lpFile As String

    lpParameters As String

    lpDirectory As String

    nShow As Long

    hInstApp As Long

    lpIDList As Long

    lpClass As String

    hkeyClass As Long

    dwHotKey As Long

    hIcon As Long

    hProcess As Long

  End Type

  '定義常量參數

  Const SEE_MASK_INVOKEIDLIST = &HC

  Const SEE_MASK_NOCLOSEPROCESS = &H40

  Const SEE_MASK_FLAG_NO_UI = &H400

  '引用API函數

  Private Declare Function ShellExecuteEX Lib "shell32.dll" Alias _

  "ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long

  '通用調用文件屬性對話框過程

  '第一個參數爲欲操作的文件全路徑,第二個參數爲窗口句柄

  Public Sub ShowProps(FileName As String, OwnerhWnd As Long)

    Dim SEI As SHELLEXECUTEINFO

    Dim r As Long

    With SEI

      .cbSize = Len(SEI)

      .fMask = SEE_MASK_NOCLOSEPROCESS Or _

       SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI

      .hwnd = OwnerhWnd

      .lpVerb = "properties"

      .lpFile = FileName

      .lpParameters = vbNullChar

      .lpDirectory = vbNullChar

      .nShow = 0

      .hInstApp = 0

      .lpIDList = 0

    End With

    r = ShellExecuteEX(SEI)

  End Sub

  Use

  '例程:調用c:/autoexec.bat的屬性對話框

  Call ShowProps("c:/autoexec.bat", Me.hwnd)

快速調用“軟盤格式化對話框”
  我們都已經熟悉了在Windows中格式化軟盤的過程,操作步驟一般是:

  1、打開“我的電腦”

  2、用鼠標右鍵點擊圖標“3.5英寸軟盤A”

  3、在出現的菜單中,選擇“格式化”

  接着,就出現了下圖所示的對話框:

06.gif
  在這個窗口中,再依次選擇你對軟盤格式化的要求參數。

  在VB開發中,通過簡捷的代碼就能快速地調用這個系統對話框,並且,通過設置不同的調用參數,能夠直接選擇對話框出現的形式。下面就詳細介紹:

  '聲明API函數

  '第2個參數表示調用對話框的具體形式

  Private Declare Function GetWindowsDirectory Lib "kernel32" _

  Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _

  ByVal nSize As Long) As Long

  '調用通用軟盤格式化對話框

  Private Sub cmdFormat(ByVal mystyle As Integer)

  Dim rtn As String

  Dim Buffer As String

  Dim WinPath As String

  Buffer = String$(255, 0)

  rtn = GetWindowsDirectory(Buffer, Len(Buffer))

  WinPath = Left(Trim(Buffer), rtn)

  rtn = Shell(WinPath + "/rundll32.exe shell32.dll,SHFormatDrive", mystyle)

  End Sub

  '調用例程

  Private Sub Command2_Click()

  Call cmdFormat(1)

  End Sub

  請注意:上面調用例程中有一個參數,這裏是1。根據你的要求不同,可以設置不同數值從而得到初始頁面不同的格式化對話框。以下做一個對照:

  參數爲1的情況:Call cmdFormat(1)

07.gif
  參數爲2的情況:Call cmdFormat(2)

08.gif
  參數爲4的情況:Call cmdFormat(4)

09.gif
快速調用“網絡資源映射對話框”
  在局域網上,我們經常將服務器上的一個共享目錄映射爲本地一個盤符,從而能否方便快速地訪問網絡資源。在VB中,可以用很少的代碼就調出映射對話框,請看下面的代碼:

  '聲明API函數

  Private Declare Function WNetConnectionDialog Lib "mpr.dll" _

  (ByVal hWnd As Long, ByVal dwType As Long) As Long

  '網絡資源映射對話框

  Private Sub ShowMapDrives(hWnd As Long)

   WNetConnectionDialog hWnd, 1

  End Sub

  '調用例程

  Private Sub Command2_Click()

   Call ShowMapDrives(Me.hWnd)

  End Sub

  運行程序,下面就是最終的結果:

10.gif
  我們注意到,在上面的代碼中,如果將“WNetConnectionDialog hWnd, 1”一行中的1修改爲2,執行後將出現打印端口映射對話框:

11.gif
  沒有想到吧!竟然能如此方便的獲取網絡資源!

總結
  以上列舉了幾個調用系統對話框的例子,大家可以看到,全部都使用到了windows的API函數。的確,要善於發現並應用API海洋中的浪花,有了她們,我們的程序開發就不會枯燥,新奇的感覺將不斷地涌現!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章