環境変数をWin32APIで置換する

Advanced Windows 第5版 上をパラパラ見てたら便利そうな関数があったのでメモ。(今まで知らなかった)
環境変数(%と%で囲まれた文字列)を含んだ文字列に環境変数を展開する関数がある。
それがExpandEnvironmentStrings
環境変数を取得するGetEnvironmentVariableを使ってごちゃごちゃするより楽ができる。
使い方の注意点は環境変数を展開した後の文字列を格納するバッファサイズが実行しないと分からないので2回実行するところ。
1度目で必要なバッファサイズを取得し、2度目で環境変数を展開する。

環境変数%WINDIR%を含む文字列を展開する例

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <locale.h> //_tsetlocale用

int _tmain(int argc, _TCHAR* argv[])
{
	_tsetlocale( LC_ALL, _T("Japanese") );	//_tprintfで日本語を表示させるために必要

	//環境変数を展開するのに必要なサイズを取得する
	DWORD bufferSize = ExpandEnvironmentStrings(_T("Windowsインストールディレクトリは%WINDIR%です"), NULL, 0);
	//必要なサイズを確保
	PTSTR pBuffer = new TCHAR[bufferSize];
	//環境変数を展開
	bufferSize = ExpandEnvironmentStrings(_T("Windowsインストールディレクトリは%WINDIR%です"), pBuffer, bufferSize);
	_tprintf(pBuffer);
	return 0;
}

実行結果

WindowsインストールディレクトリはC:\WINDOWSです