OrangeMaker_logo
memo アイコン SDK-MFC 備忘録

Windows SDKやMFCに関するメモです。
(記載内容について正しいことを保証するものではありません。MSDN等で確認してください)

OSバージョン

2009/10/1 作成
2010/9/26 afxGlobalDataを参照する方法を追記

 OSのバージョンは、APIで取得できます。

  OSVERSIONINFO osvi;
 // OSVERSIONINFO 構造体の初期化//
 ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
	
 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
 GetVersionEx((OSVERSIONINFO*)&osvi);

 OSVERSIONIFO構造体は、
 typedef struct _OSVERSIONINFOA {
     DWORD dwOSVersionInfoSize;
     DWORD dwMajorVersion;
     DWORD dwMinorVersion;
     DWORD dwBuildNumber;
     DWORD dwPlatformId;
     CHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage
 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
	
 typedef struct _OSVERSIONINFOW {
     DWORD dwOSVersionInfoSize;
     DWORD dwMajorVersion;
     DWORD dwMinorVersion;
     DWORD dwBuildNumber;
     DWORD dwPlatformId;
     WCHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage
 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, 
  RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
	
	
 とマルチバイト系とユニコード系で2種類あります。
 通常はSwMajroVersionとswMinorVersionを参照すればいいと思います。
 詳細はMSDN等を参照してください。
		

(2010.9.26追記)
MFCの場合は、afxGlobalDataのメンバを参照する手もあります。
たとえば、VISTA以降の判定の場合、
if(afxGlobalData.m_bIsWindowsVista){
//Vista以降
}
WINDOWS7以降の判定の場合
if(afxGlobalData.m_bIsWidows7){
//Windows7以降
}
このメンバ変数は、
AFXGLOBALDATAクラスのコンストラクタでGetVersion()関数でメジャーバージョンとマイナーバージョンを取得して判定しています。