bool IsWin7()
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi);
// win7的系统版本为NT6.1
if ( VER_PLATFORM_WIN32_NT == osvi.dwPlatformId &&
osvi.dwMajorVersion == 6 &&
osvi.dwMinorVersion == 1 )
{
return true;
}
else
{
return false;
}
}
typedef LANGID (WINAPI *FP_SetThreadUILanguage)(LANGID LangId);
LANGID SetThreadUILanguage(LANGID lcid)
{
HMODULE hKernel32 = GetModuleHandle(_T("Kernel32.dll"));
FARPROC pFn = GetProcAddress(hKernel32, "SetThreadUILanguage");
FP_SetThreadUILanguage pSetThreadUILanguage = (FP_SetThreadUILanguage)pFn;
if (pSetThreadUILanguage)
{
return pSetThreadUILanguage(lcid);
}
return 0;
}
转者按:增加上面的代码后问题解决,但是笔者喜欢用vs2008,编译时提示重定义,想找个编译器版本的宏,但是搜了一下搜索不到,今天看代码突然看到
#if _MSC_VER > 1000
#pragma once#endif // _MSC_VER > 1000
欣喜若狂,上网搜,果然是编译器版本宏定义,于是乎问题完美解决,vc6和vs2008完美兼容,~~P