1. 編程思想
(1)任務欄窗體的窗口信息為:
①任務欄的窗口類名是:ShellTrayWnd。
②開始按鈕的窗口類名是:Button。
③應用程序切換區的窗口類名是:ReBarWindow32。
④任務欄通知區的窗口類名是:TrayNotifyWnd。
⑤任務欄時鐘的窗口類名是:TrayClockWClass。
(2)調用FindWindow函數得到任務欄的窗口句柄。
(3)調用FindWindowEx函數得到任務欄各子區域的窗口句柄。
(4)根據窗口句柄,調用ShowWindow函數控制任務欄各區域顯示或隱藏 (show/hide);調用En ableWindow函數控制任務欄各區域有效或無效(enabled/disabled)。
2. 編程方法
(1)在Delphi3.0 IDE中新建工程Project1, Project1中包含Form1, 窗體如下圖所示:
(2)定義窗口句柄數組:Wnd:array[0..4] of THandle;
(3)GetHandles過程代碼如下:
procedure TForm1.GetHandles; begin //得到Tray Bar的窗口句柄; Wnd[0]:=FindWindow(′ShellTrayWnd′,nil); //得到開始按鈕的窗口句柄; Wnd[1]:=FindWindow(′ShellTrayWnd′,nil); Wnd[1]:=FindWindowEx(Wnd[1],HWND(0),′Button′,nil); //得到應用程序切換區的窗口句柄; Wnd[2]:=FindWindow(′ShellTrayWnd′,nil); Wnd[2]]:=FindWindowEx(Wnd[2],HWND(0),′ReBarWindow32′,nil); //得到任務欄通知區的窗口句柄; Wnd[3]:=FindWindow(′ShellTrayWnd′,nil); Wnd[3]:=FindWindowEx(Wnd[3],HWND(0),′TrayNotifyWnd′,nil); //得到任務欄時鐘的窗口句柄; Wnd[4]:=FindWindow(′ShellTrayWnd′,nil); Wnd[4]:=FindWindowEx(Wnd[4],HWND(0),′TrayNotifyWnd′,nil); Wnd[4]:=FindWindowEx(Wnd[4],HWND(0),′TrayCLockWClass′,nil); end; |
(4)EnableOrDisable過程代碼如下:
procedure TForm1.EnableOrDisable(Sender:TOBject); begin GetHandles; if TCheckBox(Sender). Checked then case TCheckBox(Sender). Tag of 0: EnableWindow(Wnd[0], False); 1: EnableWindow(Wnd[1], False); 2: EnableWindow(Wnd[2], False); 3: EnableWindow(Wnd[3], False); 4: EnableWindow(Wnd[4], False); end else case TCheckBox(Sender). Tag of 0: EnableWindow(Wnd[0], True); 1: EnableWindow(Wnd[1], True); 2: EnableWindow(Wnd[2], True); 3: EnableWindow(Wnd[3], True); 4: EnableWindow(Wnd[4], True); end; end; |
(5)HideOrShow過程代碼如下:
procedure TForm1.HideOrShow(Sender:TObject); begin GetHandles; if TCheckBox(Sender). Checked then case TCheckBox(Sender). Tag of 0: ShowWindow(Wnd[0],SWHIDE); 1: ShowWindow(Wnd[1],SWHIDE); 2: ShowWindow(Wnd[2],SWHIDE); 3: ShowWindow(Wnd[3],SWHIDE); 4: ShowWindow(Wnd[4],SWHIDE); end else case TCheckBox(Sender). Tag of 0: ShowWindow(Wnd[0],SWShow); 1: ShowWindow(Wnd[1],SWShow); 2: ShowWindow(Wnd[2],SWShow); 3: ShowWindow(Wnd[3],SWShow); 4: ShowWindow(Wnd[4],SWShow); end; end; |
(6)FormClose事件代碼如下://將Windows任務欄恢復到正常狀態;
procedure TForm1.FormClose(Sender:TObject; var Action: TCloseAction); var i:Integer; begin for i:=0 to 4 do begin EnableWindow(Wnd[i],True); ShowWindow(Wnd[i],SWShow); end; end; |
(7)按F9運行程序。以上程序在Delphi3.0/4.0、Windows95/98簡體中文版環境下調試通過。
(8)說明:本文所述方法同樣適用于VB、VC、BC、C++Builder等編程工具,但應注意語法、 變量類型等不同要求。