'SetThreadLocale'에 해당되는 글 1건

  1. 2010.03.02 Vista 이상 운영체제에서 SetThreadLocale이 먹히지 않는 현상
2010. 3. 2. 11:26
VC6 으로 만들어진 소스를 영문화 시켜 해외에 내보낼 일이 생겼어요.
그래서 영문 리소스를 한짝씩 더 만들고 소스에 박혀있던 문자열을 죄다 String Table에 박는 노가다를 끝낸 후 SetThreadLocale로 언어를 바꾸고 실행했는데.... 안먹히잖아!
이게 뭐야! 하고 찾아봤더니 Vista 이상부터는 안먹는다네요..
그래서 XP나 Vista 이상에서도 돌수있도록 다음과 같이 적절하게 만들어쓰면되요.

// 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;

}

}

 
아 귀찮아요 [...]
Posted by envi