// Vista 이상부터는 SetThreadLocale로 사용자가 직접 언어를 선택하는걸 허용하지 않는다.
// 이 함수는 XP 는 SetThreadLocale을 쓰고 Vista 이상은 SetThreadUILanguage를 부른다.
// 하지만 되도록 이걸 쓰지말고 dll로 리소스를 분리하는게 좋을듯...
bool SetThreadLocaleEx(LCID lcLocale)
{
OSVERSIONINFO osVersion;
osVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (::GetVersionEx(&osVersion) == FALSE)
{
return false;
}
if (osVersion.dwMajorVersion == 6)
{ // >= Windows Vista
HINSTANCE hKernelDll = ::LoadLibrary(_T("kernel32.dll"));
if (hKernelDll == NULL)
{
return false;
}
unsigned (WINAPI* SetThreadUILanguage)(LANGID) = (unsigned (WINAPI* )(LANGID))::GetProcAddress(hKernelDll, "SetThreadUILanguage");
if (SetThreadUILanguage == NULL)
{
return false;
}
LANGID resLangID = SetThreadUILanguage(static_cast<LANGID>(lcLocale));
return (resLangID == LOWORD(lcLocale));
}
else // <= Windows XP
{
return ::SetThreadLocale(lcLocale) ? true : false;
}
}