'SetThreadLocale'에 해당되는 글 1건
- 2010.03.02 Vista 이상 운영체제에서 SetThreadLocale이 먹히지 않는 현상
// 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;
}
}