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

Delphi GetEnvironmentVariable 讀取系統環境變數速查表:風資料夾、系統路徑、處理器資訊一覽

     編輯:Delphi

前言

GetEnvironmentVariable 是 Delphi 讀取 Windows 環境變數的標準 API。本文整理開發中最常用的系統環境變數對照表,涵蓋系統路徑、使用者設定檔、臨時目錄、處理器資訊等,並提供直接可用的程式碼片段。

核心函數宣告

uses Windows, SysUtils;

function GetEnvVar(const Name: string): string;
var
  Buf: array[0..1023] of Char;
  Len: DWORD;
begin
  Len := GetEnvironmentVariable(PChar(Name), Buf, SizeOf(Buf));
  if Len > 0 then
    SetString(Result, Buf, Len)
  else
    Result := ''; // 變數不存在
end;

// 簡易版 (SysUtils 內建)
function GetEnv(const Name: string): string;
begin
  Result := GetEnvironmentVariable(Name);
end;

常用環境變數完整對照表

變數名典型值範例用途說明
WINDIRC:\WindowsWindows 系統目錄
SYSTEMROOTC:\Windows同 WINDIR,官方建議使用此變數
SYSTEMDRIVEC:系統安裝磁碟機代號
HOMEDRIVEC:當前使用者家目錄磁碟機
USERPROFILEC:\Users\Admin當前使用者設定檔根目錄 (Win2K+)
HOMEPATH\Users\Admin相對於 HOMEDRIVE 的路徑
APPDATAC:\Users\Admin\AppData\Roaming漫遊應用程式資料 (AppData\Roaming)
LOCALAPPDATAC:\Users\Admin\AppData\Local本地應用程式資料 (AppData\Local)
TEMP / TMPC:\Users\Admin\AppData\Local\Temp當前使用者臨時檔案目錄
PROGRAMFILESC:\Program Files64-bit 程式安裝目錄
PROGRAMFILES(X86)C:\Program Files (x86)32-bit 程式安裝目錄 (64-bit OS)
COMMONPROGRAMFILESC:\Program Files\Common Files共用元件目錄
PUBLICC:\Users\Public所有使用者共用目錄
ALLUSERSPROFILEC:\ProgramData所有使用者應用程式資料 (隱藏)
USERNAMEAdmin當前登入使用者名稱
COMPUTERNAMEDESKTOP-ABC123電腦名稱
OSWindows_NT作業系統家族 (NT 核心)
NUMBER_OF_PROCESSORS8邏輯處理器數量
PROCESSOR_ARCHITECTUREAMD64 / x86處理器架構
PROCESSOR_IDENTIFIERIntel64 Family 6 Model 158 Stepping 10, GenuineIntel詳細 CPU 型號字串
PROCESSOR_LEVEL6處理器等級
PROCESSOR_REVISION9E0A處理器修訂版本
USERDOMAINDESKTOP-ABC123 / CORP-DOMAIN使用者帳號所屬網域/工作群組
COMSPECC:\Windows\System32\cmd.exe命令解譯器路徑
PATHEXT.COM;.EXE;.BAT;.CMD;.VBS;.PS1可執行檔副檔名清單
PATHC:\Windows;C:\Windows\System32;...可執行檔搜尋路徑 (極長)
PSModulePathC:\Windows\System32\WindowsPowerShell\v1.0\ModulesPowerShell 模組路徑
OneDriveC:\Users\Admin\OneDriveOneDrive 同步資料夾 (若已設定)

實用程式碼片段

1. 取得特殊資料夾路徑 (推薦用 SHGetKnownFolderPath)

uses ShlObj, ActiveX;

function GetKnownFolder(const FolderID: TGUID): string;
var
  Path: PWideChar;
begin
  Result := '';
  if SHGetKnownFolderPath(FolderID, 0, 0, Path) = S_OK then
  try
    Result := Path;
  finally
    CoTaskMemFree(Path);
  end;
end;

// 使用範例
var
  Desktop, Documents, Downloads: string;
begin
  Desktop := GetKnownFolder(FOLDERID_Desktop);       // 桌面
  Documents := GetKnownFolder(FOLDERID_Documents);   // 文件
  Downloads := GetKnownFolder(FOLDERID_Downloads);   // 下載
  // 更多 FOLDERID_* 常數定義於 ShlObj 單元
end;

2. 展開環境變數字串

uses Windows;

function ExpandEnvStr(const Str: string): string;
var
  Buf: array[0..4095] of Char;
  Len: DWORD;
begin
  Len := ExpandEnvironmentStrings(PChar(Str), Buf, SizeOf(Buf));
  if Len > 0 then
    SetString(Result, Buf, Len - 1) // 扣除結尾 #0
  else
    Result := Str;
end;

// 使用
ShowMessage(ExpandEnvStr('%USERPROFILE%\Documents')); // 實際路徑

3. 列印所有環境變數 (除錯用)

procedure ListAllEnvVars(Strings: TStrings);
var
  EnvBlock: PWideChar;
  P: PWideChar;
  S: string;
  EqPos: Integer;
begin
  EnvBlock := GetEnvironmentStringsW;
  if EnvBlock = nil then Exit;
  try
    P := EnvBlock;
    while P^ <> #0 do
    begin
      S := P;
      EqPos := Pos('=', S);
      if EqPos > 0 then
        Strings.Add(Copy(S, 1, EqPos - 1) + '=' + Copy(S, EqPos + 1, MaxInt));
      Inc(P, Length(S) + 1);
    end;
  finally
    FreeEnvironmentStringsW(EnvBlock);
  end;
end;

4. 設定當前目錄與取得

var
  CurDir: string;
begin
  CurDir := GetCurrentDir; // SysUtils
  ShowMessage(CurDir);
  
  SetCurrentDir('..'); // 切換到父目錄
  CurDir := GetCurrentDir;
  ShowMessage(CurDir);
  
  SetCurrentDir('..\..');
  CurDir := GetCurrentDir;
  ShowMessage(CurDir);
end;

注意事項

  • 權限:系統層級變數 (如 WINDIR) 需管理員權限才能修改,但讀取無限制。
  • 執行緒/進程隔離:SetEnvironmentVariable 只影響當前進程及子進程,不影響系統或其他進程。
  • 32/64-bit 重導向:32-bit 進程在 64-bit OS 讀取 %PROGRAMFILES% 會自動重導向至 Program Files (x86),需用 %PROGRAMW6432% 取得真實 64-bit 路徑。
  • Unicode:Delphi 2009+ GetEnvironmentVariable 為 Unicode 版 (GetEnvironmentVariableW),直接支援中文路徑。

結語

熟悉核心環境變數名稱,配合 GetEnvironmentVariable/ExpandEnvironmentStrings/SHGetKnownFolderPath,即能編寫跨版本、跨使用者、跨架構的路徑處理程式碼。建議將常用路徑取得邏輯封裝為工具單元,統一管理、易於維護。

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