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

Delphi 取得 Windows 系統目錄與隱藏/顯示工作列

     編輯:Delphi

一、取得 Windows 目錄與 System 目錄

許多安裝程式、啟動器或系統工具需在執行期動態判斷作業系統安裝路徑。Windows API 提供兩個直觀函式:

  • GetWindowsDirectory:取得 Windows 目錄(如 C:\Windows)。
  • GetSystemDirectory:取得 System 子目錄(如 C:\Windows\System32)。

Delphi 程式碼範例

procedure TForm1.Button1Click(Sender: TObject);
var
  SysDir: array[0..255] of Char;
begin
  { 取得 Windows 目錄 }
  GetWindowsDirectory(SysDir, 255);
  Edit1.Text := SysDir;

  { 取得 System 目錄 }
  GetSystemDirectory(SysDir, 255);
  Edit2.Text := SysDir;
end;

說明:緩衝區大小 256 字元足以容納所有版本 Windows 的路徑長度(MAX_PATH = 260)。若需支援超長路徑(>260),請改用 GetWindowsDirectoryW 搭配 WideChar 陣列。

二、隱藏/顯示 Windows 工作列

透過 FindWindow 取得工作列視窗類別名 'Shell_TrayWnd' 的控制代碼,再呼叫 ShowWindow 即可控制顯示狀態。

程式碼範例

procedure TForm1.Button1Click(Sender: TObject);  { 顯示工作列 }
var
  WndHandle: THandle;
begin
  WndHandle := FindWindow('Shell_TrayWnd', nil);
  ShowWindow(WndHandle, SW_SHOW);
end;

procedure TForm1.Button2Click(Sender: TObject);  { 隱藏工作列 }
var
  WndHandle: THandle;
begin
  WndHandle := FindWindow('Shell_TrayWnd', nil);
  ShowWindow(WndHandle, SW_HIDE);
end;

注意事項與現代環境差異

  • Windows 98/2000/XP:上述代碼測試通過。
  • Windows Vista/7/8/10/11:Shell_TrayWnd 仍存在,但桌面視窗管理器(DWM)與多工列重設計可能導致隱藏後殘留視覺痕跡,或被系統自動恢復。建議改用 ITaskbarList3 介面或 SHAppBarMessage(ABM_SETSTATE) 正規控制。
  • 多螢幕:每個螢幕可能有獨立工作列,類別名相同但 Handle 不同,需枚舉所有 Shell_TrayWnd 視窗逐一處理。
  • 權限:隱藏系統 UI 需較高權限,若 UAC 啟動,程式需以管理員身分執行。

結語

取得系統目錄是基礎技能;控制工作列顯示則屬進階系統程式設計。理解 FindWindow/ShowWindow 機制有助於掌握 Windows 視窗架構,但實務上應優先考慮使用者體驗與系統相容性,避免濫用隱藏工作列功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved