Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi】環境変数の取得方法

今回はDelphi/400で実行PCの環境変数を取得するプログラミングテクニックをご紹介いたします。

最近では大半のPCが64bit端末になってきていますが、
古い32bit端末と両方でアプリケーションを使用する場面があるかもしれません。
また32bit端末から64bit端末への移行が必要になる局面もあるかと存じます。

そうしたとき、アプリケーション側でよくある課題の一つがフォルダパスです。
例えば従来のアプリで「Program Files」フォルダを固定パスで使っている場合、
次のような違いが出てしまいます。

32bit端末:C:\Program Files
64bit端末:C:\Program Files (x86)

もちろん固定のパスを変更すれば64bit端末で動作しますが、
その場合、32bit端末ではパスが一致しなくなってしまいます。

こうした環境の違いに対応するには、端末毎に適切なパスを取得する必要があります。
そこで利用できるのが環境変数です。

環境変数にはその端末のシステムパスを持っており、
Delphi/400ではGetEnvironmentVariableという関数でプログラムから取得できます。
(システム環境変数、ユーザー環境変数いずれも取得可能)

// 例)
ShowMessage(GetEnvironmentVariable('PROGRAMFILES'));

 
このコードを実行すると、端末によって上記と同じProgram Filesフォルダを取得できます。

32bit端末:C:\Program Files
64bit端末:C:\Program Files (x86)

もちろん他にもWINDIR(Windowsのパス)など様々な環境変数で利用できるので、
環境に合わせた汎用処理を作成する際に、是非ご活用ください。

 

<代表的な、利用可能な環境変数>

環境変数名説明取得値の例
64bit端末32bitモジュールの場合)
ALLUSERSPROFILE一般的なユーザー プロファイルC:\ProgramData
APPDATAアプリケーション データ フォルダのパスC:\Users\<ユーザー名>\AppData\Roaming
COMMONPROGRAMFILES共通のプログラム ファイル フォルダのパスC:\Program Files (x86)\Common Files
COMPUTERNAMEコードを実行するコンピュータの名前(省略)
COMSPECcmd.exe プログラムのパスC:\WINDOWS\system32\cmd.exe
PATH現在のプログラムパスの一覧(省略、セミコロン区切り)
PROGRAMFILESプログラム ファイル フォルダのパスC:\Program Files (x86)
SYSTEMROOTシステム ディレクトリC:\WINDOWS
TEMP一時ファイル フォルダのパスC:\Users\<ユーザー名>\AppData\Local\Temp
TMP一時ファイルを格納するディレクトリC:\Users\<ユーザー名>\AppData\Local\Temp
USERDOMAIN現在のマシンのドメイン(省略)
USERNAME現在のユーザーの名前<ユーザー名>
USERPROFILE現在のユーザーの情報が格納されているフォルダのパスC:\Users\<ユーザー名>
WINDIRWindows フォルダのパスC:\WINDOWS

 

<関連リンク>
System.SysUtils.GetEnvironmentVariable – RAD Studio API Documentation
Delphi System32とSysWOW64を使い分ける手順 | Migaro. 技術Tips
 (環境変数ではSystem32とSysWOW64の使い分けができないため、こちらも参照)

 

 

(ミガロ.情報マガジン「MIGARO News!!」Vol.195 2017年2月号より、2025年公開にあわせて一部改変)