VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > vb >
  • vb教程之用 VB 实现任务栏的模块化操作

武汉 艾军

在 VB 编程中有时需要对系统的任务栏的各个部分(如开始菜单按钮、时钟等等)进行各类操作(如隐藏、显示、有效、无效)等等,这是如何实现的呢,主要就是通过 ShowWindow、EnableWindow 来完成的。
下面将通过一个自定义的函数(ShowHideTaskbar ),来完成“隐藏”,“显示”任务栏各部分的操作。
注释:使用示例 
注释:ShowHideTaskbar "任务栏", "隐藏"
注释:ShowHideTaskbar "任务栏", "显示"
注释:ShowHideTaskbar "图标", "隐藏"
注释:ShowHideTaskbar "图标", "显示"
注释:ShowHideTaskbar "程序按钮", "隐藏"
注释:ShowHideTaskbar "程序按钮", "显示"
注释:ShowHideTaskbar "开始菜单", "隐藏"
注释:ShowHideTaskbar "开始菜单", "显示"
注释:ShowHideTaskbar "时钟", "隐藏"
注释:ShowHideTaskbar "时钟", "显示"
注释:ShowHideTaskbar "快速启动", "隐藏"
注释:ShowHideTaskbar "快速启动", "显示"

请大家新建一个模块(.bas)文件,自定义 ShowHideTaskbar 函数及其他,这样在以后的任何程序中只要调用此模块就可以了。
注释:本模块是关于显示隐藏系统任务栏的
Option Explicit
注释:有关 API 函数的注释,将在最后详细说明
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Const SW_HIDE = 0
Const SW_SHOW = 5
Dim wnd As Long
Public Function ShowHideTaskbar(ByVal Part As String, ByVal Action As String)
    注释:获得任务栏的窗口句柄
    wnd = FindWindow("Shell_TrayWnd", vbNullString)
    
    Select Case Part
        Case "任务栏"
        Case "开始菜单"
            wnd = FindWindowEx(wnd, 0, "Button", vbNullString) 
        Case "图标"
            wnd = FindWindowEx(wnd, 0, "TrayNotifyWnd", vbNullString)
        Case "程序按钮"
            wnd = FindWindowEx(wnd, 0, "ReBarWindow32", vbNullString)
            wnd = FindWindowEx(wnd, 0, "MSTaskSwWClass", vbNullString)
        Case "时钟"
            wnd = FindWindowEx(wnd, 0, "TrayNotifyWnd", vbNullString)
            wnd = FindWindowEx(wnd, 0, "TrayClockWClass", vbNullString)
        Case "快速启动"
            wnd = FindWindowEx(wnd, 0, "ReBarWindow32", vbNullString)
            wnd = FindWindowEx(wnd, 0, "ToolbarWindow32", vbNullString)
    End Select
    
    If Action = "显示" Then ShowWindow wnd, SW_SHOW(注意点1)
    If Action = "隐藏" Then ShowWindow wnd, SW_HIDE
End Function

补充:通过上面的模块就可以很方便对任务栏的各个部分进行“显示”、“隐藏”的操作,如果还需要使其“无效”、“有效”大家可使用 EnableWindow  来完成,方法和上面的差不多,只是在(注意点1)处稍做修改就行了。本程序在 Win98、VB5.0 环境下运行良好,大家如果还有什么问题可到 www.d1vb.com 来一起讨论。

API 函数详细注释:
1、FindWindowEx 
VB声明 
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long 
说明 
在窗口列表中寻找与指定条件相符的第一个子窗口 
返回值 
Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 
参数表 
参数 类型及说明 
hWnd1 Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找) 
hWnd2 Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索 
lpsz1 String,欲搜索的类名。零表示忽略 
lpsz2 String,欲搜索的类名。零表示忽略 

2、ShowWindow 
VB声明 
Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long 
说明 
控制窗口的可见性(在vb里使用:针对vb窗体及控件,请使用对应的vb属性) 
返回值 
Long,如窗口之前是可见的,则返回TRUE(非零),否则返回FALSE(零) 
参数表 
参数 类型及说明 
hwnd Long,窗口句柄,要向这个窗口应用由nCmdShow指定的命令 
nCmdShow Long,为窗口指定可视性方面的一个命令。请用下述任何一个常数 
SW_HIDE 隐藏窗口,活动状态给令一个窗口 
SW_MINIMIZE 最小化窗口,活动状态给令一个窗口 
SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态 
SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态 
SW_SHOWMAXIMIZED 最大化窗口,并将其激活 
SW_SHOWMINIMIZED 最小化窗口,并将其激活 
SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口 
SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口 
SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口 
SW_SHOWNORMAL 与SW_RESTORE相同 

3、FindWindow 
VB声明 
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
说明 
寻找窗口列表中第一个符合指定条件的顶级窗口(在vb里使用:FindWindow最常见的一个用途是获得ThunderRTMain类的隐藏窗口的句柄;该类是所有运行中vb执行程序的一部分。获得句柄后,可用api函数GetWindowText取得这个窗口的名称;该名也是应用程序的标题) 
返回值 
Long,找到窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 
参数表 
参数 类型及说明 
lpClassName String,窗口类型名称,或不知道窗口的类型的名称,可填入 vbNullString。
lpWindowName String,窗口标题,或只知道窗口类型名称,这一参数可填入 vbNullString。
注解 
很少要求同时按类与窗口名搜索。为向自己不准备参数传递一个零,最简便的办法是传递vbNullString常数 

4、EnableWindow 
VB声明 
Declare Function EnableWindow Lib "user32" Alias "EnableWindow" (ByVal hwnd As Long, ByVal fEnable As Long) As Long 
说明 
在指定的窗口里允许或禁止所有鼠标及键盘输入(在vb里使用:在vb窗体和控件中使用Enabled属性) 
返回值 
Long,非零表示成功,零表示失败。会设置GetLastError 
参数表 
参数 类型及说明 
hwnd Long,窗口句柄 
fEnable Long,非零允许窗口,零禁止

相关教程