使用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;