Windows 95/98/NT 工作列(systray.exe)由多個子視窗組成,各擁有獨特類別名:
| 區域 | 視窗類別名 |
|---|---|
| 整個工作列 | Shell_TrayWnd |
| 開始按鈕 | Button |
| 應用程式切換區 | ReBarWindow32 |
| 通知區域 (系統匣) | TrayNotifyWnd |
| 時鐘 | TrayClockWClass |
FindWindow 取得工作列主視窗控制代碼FindWindowEx 遞迴取得各子區域控制代碼ShowWindow 控制顯示/隱藏(SW_HIDE/SW_SHOW)EnableWindow 控制啟用/禁用procedure TForm1.GetHandles;
begin
Wnd[0] := FindWindow('Shell_TrayWnd', nil); // 工作列
Wnd[1] := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil); // 開始按鈕
Wnd[2] := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'ReBarWindow32', nil); // 切換區
Wnd[3] := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil); // 通知區
Wnd[4] := FindWindowEx(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil), 0, 'TrayClockWClass', nil); // 時鐘
end;
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;
procedure TForm1.HideOrShow(Sender: TObject);
begin
GetHandles;
if TCheckBox(Sender).Checked then
case TCheckBox(Sender).Tag of
0: ShowWindow(Wnd[0], SW_HIDE);
1: ShowWindow(Wnd[1], SW_HIDE);
2: ShowWindow(Wnd[2], SW_HIDE);
3: ShowWindow(Wnd[3], SW_HIDE);
4: ShowWindow(Wnd[4], SW_HIDE);
end
else
case TCheckBox(Sender).Tag of
0: ShowWindow(Wnd[0], SW_SHOW);
1: ShowWindow(Wnd[1], SW_SHOW);
2: ShowWindow(Wnd[2], SW_SHOW);
3: ShowWindow(Wnd[3], SW_SHOW);
4: ShowWindow(Wnd[4], SW_SHOW);
end;
end;
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], SW_SHOW);
end;
end;