-
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,非零允许窗口,零禁止
在 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,非零允许窗口,零禁止
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比