核心提示:使用Windows95/NT/98操作系統的用戶知道:Windows正常啟動后,在電腦屏幕下方出現一塊 任務欄。
使用Windows95/NT/98操作系統的用戶知道:Windows正常啟動后,在電腦屏幕下方出現一塊 任務欄。從系統功能角度而言,整個任務欄包括幾個不同的子區域,從左至右依次是:開始 按鈕、應用程序切換區(Application Switch Bar)、任務欄通知區(Notification Area)以 及任務欄時鍾。與其它Windows應用程序相同,任務欄程序(systray.exe)由幾個不同的窗體 組成,這些窗體是具有各自的窗口類名、顯示方式等信息。因此,只要得到有關窗口信息, 即可通過編程全面控制Windows任務欄的不同區域。
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;
|
http://blog.csdn.net/yanjiaye520/article/details/6659536