用 VB 完成任務(wù)欄的模塊化設(shè)置
發(fā)表時(shí)間:2024-02-24 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]武漢 艾軍在 VB 編程中有時(shí)需要對(duì)系統(tǒng)的任務(wù)欄的各個(gè)部分(如開(kāi)始菜單按鈕、時(shí)鐘等等)進(jìn)行各類(lèi)操作(如隱藏、顯示、有效、無(wú)效)等等,這是如何實(shí)現(xiàn)的呢,主要就是通過(guò) ShowWindow、EnableWindow 來(lái)完成的。下面將通過(guò)一個(gè)自定義的函數(shù)(ShowHideTaskbar ),來(lái)完成“隱藏...
武漢 艾軍
在 VB 編程中有時(shí)需要對(duì)系統(tǒng)的任務(wù)欄的各個(gè)部分(如開(kāi)始菜單按鈕、時(shí)鐘等等)進(jìn)行各類(lèi)操作(如隱藏、顯示、有效、無(wú)效)等等,這是如何實(shí)現(xiàn)的呢,主要就是通過(guò) ShowWindow、EnableWindow 來(lái)完成的。
下面將通過(guò)一個(gè)自定義的函數(shù)(ShowHideTaskbar ),來(lái)完成“隱藏”,“顯示”任務(wù)欄各部分的操作。
注釋?zhuān)菏褂檬纠?
注釋?zhuān)篠howHideTaskbar "任務(wù)欄", "隱藏"
注釋?zhuān)篠howHideTaskbar "任務(wù)欄", "顯示"
注釋?zhuān)篠howHideTaskbar "圖標(biāo)", "隱藏"
注釋?zhuān)篠howHideTaskbar "圖標(biāo)", "顯示"
注釋?zhuān)篠howHideTaskbar "程序按鈕", "隱藏"
注釋?zhuān)篠howHideTaskbar "程序按鈕", "顯示"
注釋?zhuān)篠howHideTaskbar "開(kāi)始菜單", "隱藏"
注釋?zhuān)篠howHideTaskbar "開(kāi)始菜單", "顯示"
注釋?zhuān)篠howHideTaskbar "時(shí)鐘", "隱藏"
注釋?zhuān)篠howHideTaskbar "時(shí)鐘", "顯示"
注釋?zhuān)篠howHideTaskbar "快速啟動(dòng)", "隱藏"
注釋?zhuān)篠howHideTaskbar "快速啟動(dòng)", "顯示"
請(qǐng)大家新建一個(gè)模塊(.bas)文件,自定義 ShowHideTaskbar 函數(shù)及其他,這樣在以后的任何程序中只要調(diào)用此模塊就可以了。
注釋?zhuān)罕灸K是關(guān)于顯示隱藏系統(tǒng)任務(wù)欄的
Option Explicit
注釋?zhuān)河嘘P(guān) API 函數(shù)的注釋?zhuān)瑢⒃谧詈笤敿?xì)說(shuō)明
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)
注釋?zhuān)韩@得任務(wù)欄的窗口句柄
wnd = FindWindow("Shell_TrayWnd", vbNullString)
Select Case Part
Case "任務(wù)欄"
Case "開(kāi)始菜單"
wnd = FindWindowEx(wnd, 0, "Button", vbNullString)
Case "圖標(biāo)"
wnd = FindWindowEx(wnd, 0, "TrayNotifyWnd", vbNullString)
Case "程序按鈕"
wnd = FindWindowEx(wnd, 0, "ReBarWindow32", vbNullString)
wnd = FindWindowEx(wnd, 0, "MSTaskSwWClass", vbNullString)
Case "時(shí)鐘"
wnd = FindWindowEx(wnd, 0, "TrayNotifyWnd", vbNullString)
wnd = FindWindowEx(wnd, 0, "TrayClockWClass", vbNullString)
Case "快速啟動(dòng)"
wnd = FindWindowEx(wnd, 0, "ReBarWindow32", vbNullString)
wnd = FindWindowEx(wnd, 0, "ToolbarWindow32", vbNullString)
End Select
If Action = "顯示" Then ShowWindow wnd, SW_SHOW(注意點(diǎn)1)
If Action = "隱藏" Then ShowWindow wnd, SW_HIDE
End Function
補(bǔ)充:通過(guò)上面的模塊就可以很方便對(duì)任務(wù)欄的各個(gè)部分進(jìn)行“顯示”、“隱藏”的操作,如果還需要使其“無(wú)效”、“有效”大家可使用 EnableWindow 來(lái)完成,方法和上面的差不多,只是在(注意點(diǎn)1)處稍做修改就行了。本程序在 Win98、VB5.0 環(huán)境下運(yùn)行良好,大家如果還有什么問(wèn)題可到 www.d1vb.com 來(lái)一起討論。
API 函數(shù)詳細(xì)注釋?zhuān)?br>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
說(shuō)明
在窗口列表中尋找與指定條件相符的第一個(gè)子窗口
返回值
Long,找到的窗口的句柄。如未找到相符窗口,則返回零。會(huì)設(shè)置GetLastError
參數(shù)表
參數(shù) 類(lèi)型及說(shuō)明
hWnd1 Long,在其中查找子的父窗口。如設(shè)為零,表示使用桌面窗口(通常說(shuō)的頂級(jí)窗口都被認(rèn)為是桌面的子窗口,所以也會(huì)對(duì)它們進(jìn)行查找)
hWnd2 Long,從這個(gè)窗口后開(kāi)始查找。這樣便可利用對(duì)FindWindowEx的多次調(diào)用找到符合條件的所有子窗口。如設(shè)為零,表示從第一個(gè)子窗口開(kāi)始搜索
lpsz1 String,欲搜索的類(lèi)名。零表示忽略
lpsz2 String,欲搜索的類(lèi)名。零表示忽略
2、ShowWindow
VB聲明
Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
說(shuō)明
控制窗口的可見(jiàn)性(在vb里使用:針對(duì)vb窗體及控件,請(qǐng)使用對(duì)應(yīng)的vb屬性)
返回值
Long,如窗口之前是可見(jiàn)的,則返回TRUE(非零),否則返回FALSE(零)
參數(shù)表
參數(shù) 類(lèi)型及說(shuō)明
hwnd Long,窗口句柄,要向這個(gè)窗口應(yīng)用由nCmdShow指定的命令
nCmdShow Long,為窗口指定可視性方面的一個(gè)命令。請(qǐng)用下述任何一個(gè)常數(shù)
SW_HIDE 隱藏窗口,活動(dòng)狀態(tài)給令一個(gè)窗口
SW_MINIMIZE 最小化窗口,活動(dòng)狀態(tài)給令一個(gè)窗口
SW_RESTORE 用原來(lái)的大小和位置顯示一個(gè)窗口,同時(shí)令其進(jìn)入活動(dòng)狀態(tài)
SW_SHOW 用當(dāng)前的大小和位置顯示一個(gè)窗口,同時(shí)令其進(jìn)入活動(dòng)狀態(tài)
SW_SHOWMAXIMIZED 最大化窗口,并將其激活
SW_SHOWMINIMIZED 最小化窗口,并將其激活
SW_SHOWMINNOACTIVE 最小化一個(gè)窗口,同時(shí)不改變活動(dòng)窗口
SW_SHOWNA 用當(dāng)前的大小和位置顯示一個(gè)窗口,不改變活動(dòng)窗口
SW_SHOWNOACTIVATE 用最近的大小和位置顯示一個(gè)窗口,同時(shí)不改變活動(dòng)窗口
SW_SHOWNORMAL 與SW_RESTORE相同
3、FindWindow
VB聲明
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
說(shuō)明
尋找窗口列表中第一個(gè)符合指定條件的頂級(jí)窗口(在vb里使用:FindWindow最常見(jiàn)的一個(gè)用途是獲得ThunderRTMain類(lèi)的隱藏窗口的句柄;該類(lèi)是所有運(yùn)行中vb執(zhí)行程序的一部分。獲得句柄后,可用api函數(shù)GetWindowText取得這個(gè)窗口的名稱(chēng);該名也是應(yīng)用程序的標(biāo)題)
返回值
Long,找到窗口的句柄。如未找到相符窗口,則返回零。會(huì)設(shè)置GetLastError
參數(shù)表
參數(shù) 類(lèi)型及說(shuō)明
lpClassName String,窗口類(lèi)型名稱(chēng),或不知道窗口的類(lèi)型的名稱(chēng),可填入 vbNullString。
lpWindowName String,窗口標(biāo)題,或只知道窗口類(lèi)型名稱(chēng),這一參數(shù)可填入 vbNullString。
注解
很少要求同時(shí)按類(lèi)與窗口名搜索。為向自己不準(zhǔn)備參數(shù)傳遞一個(gè)零,最簡(jiǎn)便的辦法是傳遞vbNullString常數(shù)
4、EnableWindow
VB聲明
Declare Function EnableWindow Lib "user32" Alias "EnableWindow" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
說(shuō)明
在指定的窗口里允許或禁止所有鼠標(biāo)及鍵盤(pán)輸入(在vb里使用:在vb窗體和控件中使用Enabled屬性)
返回值
Long,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError
參數(shù)表
參數(shù) 類(lèi)型及說(shuō)明
hwnd Long,窗口句柄
fEnable Long,非零允許窗口,零禁止