首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 全方位控制 Windows 工作列:隱藏、禁用、自訂各區域完整攻略

     編輯:Delphi

工作列架構解析

Windows 95/98/NT 工作列(systray.exe)由多個子視窗組成,各擁有獨特類別名:

區域視窗類別名
整個工作列Shell_TrayWnd
開始按鈕Button
應用程式切換區ReBarWindow32
通知區域 (系統匣)TrayNotifyWnd
時鐘TrayClockWClass

程式設計思路

  1. FindWindow 取得工作列主視窗控制代碼
  2. FindWindowEx 遞迴取得各子區域控制代碼
  3. ShowWindow 控制顯示/隱藏(SW_HIDE/SW_SHOW)
  4. 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;

適用範圍與注意事項

  • 經 Delphi 3.0/4.0、Windows 95/98 簡體中文版測試通過
  • 同樣適用於 VB、VC、BC、C++Builder 等工具,注意語法與型別差異
  • 謹慎使用:隱藏工作列可能影響使用者體驗,建議提供明確恢復機制
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved