多言語のユーザーインターフェースを持つアプリケーションを作成するためのMUI関連APIの1つにGetFileMUIPathがある。これは言語に応じたreadmeや画像などのファイルへのパスを取得するために用意されている。
例えば「c:\test\readme.txt」というパスに対してGetFileMUIPathを実行すると、日本語UIのときは「c:\test\ja-jp\readme.txt」、英語なら「c:\test\en-us\readme.txt」、ドイツ語なら「「c:\test\de-de\readme.txt」」のように自動的に言語に応じたフォルダ内のファイルへのパスに置き換わる。ただしその言語のファイルが用意されていない場合はデフォルトの言語用のパスになる。
ここでは言語に応じたreadme.txtへのパスを取得し、それをShellExecuteによって開いている。
#include "shellapi.h"
void Test(void)
{
BOOL ret;
WCHAR pwszMUILanguage[LOCALE_NAME_MAX_LENGTH];
ULONG nMUILanguageSize;
WCHAR pwszFileMUIPath[MAX_PATH*10];
ULONG nFileMUIPathSize;
ULONGLONG nEnumerator;
int nRet;
//「はい」ボタンが押されたら言語として英語を選択する
nRet = ::MessageBox(NULL,_T("英語にしますか?"),_T(""),MB_YESNO);
if(nRet == IDYES)
::SetThreadUILanguage(MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT));
//選択した言語に応じたreadme.txtへのパスを取得する
nMUILanguageSize = LOCALE_NAME_MAX_LENGTH;
nFileMUIPathSize = MAX_PATH * 10;
nEnumerator = 0;
ret = ::GetFileMUIPath(0,L"readme.txt",pwszMUILanguage,&nMUILanguageSize,pwszFileMUIPath,&nFileMUIPathSize,&nEnumerator);
//選択した言語に応じたreadme.txtを開く
if(ret)
::ShellExecute(NULL,_T("open"),pwszFileMUIPath,NULL,NULL,SW_SHOWNORMAL);
}
