CSDN博客

img hktl

VB==快速调用系统对话框(全)

发表于2001/3/30 1:48:00  1164人阅读

分类: vb


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

  Windows系统给我们提供了许多非常实用的功能,而且都是以对话框的形式展现在用户眼前,比如:查找文件、浏览选择后执行程序,等等 ... 如果我们能在程序中以简练的代码快速调用它们,就可以移花接木般地达到需要的目的。这样,既省却了再次编写繁琐代码的过程,又能让程序快速执行(调用系统内核模块,能不快吗^_^)。以下就列举几个这样的例子:  

  ●快速调用“查找文件对话框”

  ●快速调用“系统重新启动对话框”

  ●快速调用“程序运行对话框”

  ●快速调用“文件属性对话框”

  ●快速调用“软盘格式化对话框”

  ●快速调用“网络资源映射对话框”

  ●快速调用“查找文件对话框”

快速调用“查找文件对话框”
  在Windows环境中,如果要查找一个文件,通常情况下采取的步骤是:

  1、确定查找文件所在的文件夹范围

  2、按热键F3

  3、在出现的“查找:所有文件”窗口中,输入各个项目。


  是不是有点复杂。在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

  运行一下,看看实际的效果图:


  直接使用系统内在的功能,省得自己去绘制表单了,不仅实现的功能可以很严谨,而且样子还很专业呢!

快速调用“程序运行对话框”
  一般情况下,当我们需要在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 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、在出现的菜单中,选择“格式化”

  接着,就出现了下图所示的对话框:


  在这个窗口中,再依次选择你对软盘格式化的要求参数。

  在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)


  参数为2的情况:Call cmdFormat(2)


  参数为4的情况:Call cmdFormat(4)


快速调用“网络资源映射对话框”
  在局域网上,我们经常将服务器上的一个共享目录映射为本地一个盘符,从而能否方便快速地访问网络资源。在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

  运行程序,下面就是最终的结果:


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


  没有想到吧!竟然能如此方便的获取网络资源!

总结
  以上列举了几个调用系统对话框的例子,大家可以看到,全部都使用到了windows的API函数。的确,要善于发现并应用API海洋中的浪花,有了她们,我们的程序开发就不会枯燥,新奇的感觉将不断地涌现!



0 0

相关博文

我的热门文章

img
取 消
img