◆ OSの種別(プラットフォーム)を判別する
  • プログラムを書いていると、動作するOSを限定させたり、OSの種別によって処理を分岐させたりしたい場合があります。
  • 以下の関数は、プログラムが起動されているOSのプラットフォーム(Win3.1/95/98/NT/2k etc)の種別を返す関数です。
  • 内部で、WinAPIのGetVersionEx関数を使用しています。

!ポイント
  • OSVERSIONINFO構造体の情報を利用する.
    WinAPIの GetVersionEx という関数を使用すると、 OSVERSIONINFO構造体にOSの詳細情報を取得できます。
    OSが Win95/98 の場合は 構造体のメンバ変数 dwPlatformId に VER_PLATFORM_WIN32_WINDOWSが返され、
    WinNT/2000の場合は VER_PLATFORM_WIN32_NT が返されます。
    更に dwMajorVersion と dwMinorVersion というメンバ変数の情報を利用すれば、95/98/NT/2000 をそれぞれ判別できます (詳細はソースを参照の事)。
  • WinAPI GetVersionExの使用法に注意する.
    GetVersionEx 関数は、呼び出す前にOSVERSIONINFO構造体のメンバ dwOSVersionInfoSize に構造体サイズを指定してあげないといけません。
    例)
    stOSVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

必要なヘッダファイル
"winbase.h"

関数宣言・定数定義部

//関数戻り値の定義
#define	OSVER_ERROR	-1	//バージョンの取得失敗
#define	OSVER_WIN32s	0	//Windows3.1(32bit)
#define	OSVER_WIN95	1	//Windows95
#define	OSVER_WIN98	2	//Windows98
#define	OSVER_WINNT	3	//WindowsNT(WS/SERVER)
#define	OSVER_WIN2K	4	//Windows2000
#define	OSVER_UNKNOWN	5	//不明なバージョン

//関数のプロトタイプ宣言
int	GetOSVerInfo( void );

関数定義部
/*
 * Function Name:GetOSVerInfo();
 *
 * Paramator	:NONE
 * Return	:int	OSの種別。
 *			失敗したらOSVER_ERROR(-1)を返す。
 * Description	:使用中のOSのバージョン及び種別
 *		 (Windows3.1/95/98/NT/2000)を返す。
 */
int GetOSVerInfo( void )
{
	OSVERSIONINFO	stOSVer;

	//何故か最初に構造体のサイズを指定しなきゃダメ...
	stOSVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

	//バージョン情報取得(WinAPI関数)
	if( !GetVersionEx(&stOSVer) )
	{
		return OSVER_ERROR;
	}

	//取り敢えず WinAPIで定義されたプラットフォームで分岐
	switch(stOSVer.dwPlatformId)
	{
		case VER_PLATFORM_WIN32s:
			//Win3.1の場合
			return OSVER_WIN32s;
		case VER_PLATFORM_WIN32_WINDOWS:
			//Win32の場合(95or98)
			if(stOSVer.dwMinorVersion==0)
				return OSVER_WIN95;
			else if(stOSVer.dwMinorVersion== 1)
				return OSVER_WIN98;
			else
				return OSVER_UNKNOWN;
		case VER_PLATFORM_WIN32_NT:
			//WinNTの場合(NTor2000)
			if(stOSVer.dwMajorVersion==4)
				return OSVER_WINNT;
			else if(stOSVer.dwMajorVersion==5)
				return OSVER_WIN2K;
			else
				return OSVER_UNKNOWN;
		default:
			return OSVER_UNKNOWN;
	}
}



戻る