VB千里行——快速调用系统对话框 Windows系统给我们提供了许多非常实用的功能，而且都是以对话框的形式展现在用户眼前，比如：查找文件、浏览选择后执行程序，等等……如果我们能在程序中以简练的代码快速调用它们，就可以移花接木般地达到需要的目的。这样，既省却了再次编写繁琐代码的过程，又能让程序快速执行。以下就列举几个这样的例子。 快速调用“查找文件对话框” 在Windows环境中，如果要查找一个文件，通常情况下采取的步骤是： 1.确定查找文件所在的文件夹范围。
2.按热键F3。
3.在出现的“查找:所有文件”窗口中，输入各个项目。

是不是有点复杂。在VB程序中，能否通过点击一个按钮，就出现的“查找：所有文件”？答案是肯定的！代码如下：
’声明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:\Windows")
调用的代码ShowFindDialog(“C:\Windows”)，非常简练。注意：如果括号中的参数不是一个合法的目录名，这一行调用命令将不会产生任何结果。如果参数为空，就等于选择了当前目录。
快速调用“系统重新启动对话框”
我们在安装应用软件时，经常遇到安装结束时要求用户重新启动机器的确认对话框，这时系统将根据用户的选择重新启动，或者暂时退出安装，等待用户手工重新启动机器。其实，在我们的应用程序中，可以用很少的代码就调用出系统本身的重新启动对话框，真的是非常快捷！代码是：
’声明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, vbNull-String, SystemChangeRestart
End Sub
’调用例程
SettingsChanged Form1
运行一下，看看实际的效果图：

直接使用系统内在的功能，省得自己去绘制表单了，不仅实现的功能可以很严谨，而且样子还很专业呢！
快速调用“程序运行对话框”
一般情况下，当我们需要在VB程序中调用一个外部.exe或者.com程序时，一般要用到shell命令。它提供了一种非常简捷的方式让我们执行一个确定的外部程序。但缺点也显现出了，就是它不提供用户选择执行程序的功能。你也许还记得这样的经历：我们用鼠标点击桌面左小角的“开始”，在选择“运行”，这时，就出现了一个“运行”对话框：

你可以在这里直接输入要执行的程序全路径，或者点击“浏览”按钮，选择一个程序。
要达到同样的效果，请使用下面的代码：
’声明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")
怎么样，输入完以上代码了吗？执行一下看看效果，是不是很满意。
快速调用“文件属性对话框”
为了查看一个文件的大小、创建时间、存取属性（只读、归档、隐藏）等等情况，采取的步骤一般是：
1.定位文件。
2.用鼠标右键单击文件。
3.在出现的菜单中选择“属性”。
这时，就出现了文件属性对话框。比如，对于c:\ autoexec.bat实施上面的操作后，图示如下：

这时，我们就能对它的各种属性值进行修改。
在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 SHELLEX-ECUTEINFO) 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)
快速调用“网络资源映射对话框”
在局域网上，我们经常将服务器上的一个共享目录映射为本地一个盘符，从而能否方便快速地访问网络资源。在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
运行程序，下面就是最终的结果：

我们注意到，在上面的代码中，如果将“WNet Connection Dialog hWnd, 1”一行中的1修改为2，执行后将出现打印端口映射对话框：

没有想到吧！竟然能如此方便的获取网络资源！
（甘冀平）