今回は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フォルダを取得できます。

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 | コードを実行するコンピュータの名前 | (省略) |
| COMSPEC | cmd.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\<ユーザー名> |
| WINDIR | Windows フォルダのパス | C:\WINDOWS |
<関連リンク>
・System.SysUtils.GetEnvironmentVariable – RAD Studio API Documentation
・Delphi System32とSysWOW64を使い分ける手順 | Migaro. 技術Tips
(環境変数ではSystem32とSysWOW64の使い分けができないため、こちらも参照)
(ミガロ.情報マガジン「MIGARO News!!」Vol.195 2017年2月号より、2025年公開にあわせて一部改変)