API应用秘技(15):系统对话框任我用(上)

软件世界

  本期看点:用一系列API函数来调用各类非常规的系统对话框,包括调用“文件属性”对话框、调用“运行”对话框、调用“系统设置改变”对话框和调用“浏览文件夹”对话框等。这些应用不仅免去了繁琐编写代码的过程,也使程序功能大为增强和更为专业化。

  本期实例效果

  1.调用“文件属性”对话框

  运行后将调用系统的“文件属性”对话框(如图1),这个功能可以增加到文件管理型的程序中。

  2.调用“运行”对话框

  想过在你自己的程序中,增加一项“运行”功能吗?运行后将调用系统的“运行”对话框(如图2)。

  相关API函数声明

  实现各类系统对话框调用所需的API系列函数名称和功能如下所述:

  ①ShellExecuteEX

  说明:该函数功能非常强大,本文仅介绍了它实现系统对话框调用的功能。

  返回值:Long型,如返回非零值,则代表成功。

  参数:

  SEI:ShellExecuteinfo结构类型,该结构为ShellExecuteEX函数提供相关的操作信息,其参数声明和各成员作用如下所述:

  Type ShellExecuteinfocbSize 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

  VB声明:Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long

  ②SHRunDialog

  说明:该函数用于调用“运行”对话框。

  返回值:Long型,如返回非零值,则代表成功。

  参数:

  hOwner参数:代表调用对话框的对象句柄。

  UnknownP1参数:为保留参数,调用时可赋0值。

  UnknownP2参数:为保留参数,调用时可赋0值。

  szTitle参数:代表对话框标题,用户可自定义。

  szPrompt参数:代表对话框提示的内容,用户可自定义。

  uFlags参数:用于设置是否显示“浏览”按钮。

  VB声明: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

  程序实现方法

  调用“文件属性”对话框

  使用ShellExecuteEX函数调用“文件属性”对话框时,需将lpVerb参数设置为“properties”(代表获取文件属性)并将调用该对话框的窗体句柄赋值给hwnd参数,而需运行的文件名则赋值给lpFile参数,核心代码如下所示:

  注:先进行API函数声明①。

  '定义常量

  Const SEE_MASK_INVOKEIDLIST = &HC

  Const SEE_MASK_NOCLOSEPROCESS = &H40

  Const SEE_MASK_FLAG_NO_UI = &H400

  '调用“文件属性”对话框子程序

  Sub DispProps(FileName As String, OwnerhWnd As Long)

  Dim SEI As SHELLEXECUTEINFO

  Dim r As Long

  With SEI

  .cbSize = Len(SEI)

  .fMask = SEE_MASK_NOCLOSEPRO CESS 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) '参考API函数声明①

  End Sub

  提示:调用“文件属性”对话框的语句如下所示:

  Call DispProps("c:\ autoexec.bat", Me.hwnd)

  调用“运行”对话框

  在使用SHRunDialog函数调用“运行”对话框时,可通过szTitle 参数设置对话框标题,通过szPrompt参数设置对话框提示的内容。此外调用时,需将hOwner参数赋值为调用该对话框的窗体句柄,代码如下所示:

  注:先进行API函数声明②。

  '调用“运行”对话框子程序

  Sub ShowRunDialog(ByRef CallForm As Form, Optional Title As String, Optional Description As String)

  SHRunDialog CallForm.hwnd, 0, 0, Title, Description, 0

  End Sub

  调用“运行”对话框的代码如下所示:

  Call ShowRunDialog(Me) '参考API函数声明②

  此外,如将上述代码的“SHRunDialog CallForm.hwnd, 0, 0, Title, Description, 0”语句修改为“SHRunDialog CallForm.hwnd, 0, 0, Title, Description, 1”,则调用的“运行”对话框将不显示“浏览”按钮。

  下期预告:实现“系统设置改变”和“浏览文件夹”对话框。