概要

Windowsとインターネットエクスプローラーのバージョンを表示します。Visual C++ 2005 ExpressでコンパイルするとWindows 98にも対応します。Windows 9x系はMessageBox API以外はUNICODEに対応していないのでマルチバイトでコンパイルしてください。
Visual C++ 2013でGetVerrsionEx APIを使用するとコンパイルできないので、プラグマで警告を無視するように設定しています。
本プログラムではWindowsはエディション,ビルド番号を表示していますが、メージャーとマイナーバージョンのみ必要であれば、Windowsのバージョンを表示(VerifyVersionInfo版)を参照してください。互換モードで例えばWindows XPにするとGetVersionEx APIはXPとして認識します。

変更履歴

2014.08.09 初版
2014.08.24 GetVersionEx APIの実行結果を表示。Windows 2012がWindows 8と表示されるのを修正。Windows 2003と2003R2を判別できるように修正。Windows 8.1とWindows 2012R2に対応(manifest.xml埋め込み時)
2014.09.03 リンク先の修正

テスト環境

コンパイラ

Visual C++ 2005/2008/2010/2013 Express 32/64bit マルチバイト/UNICODE

実行環境

クリックすると実行したときの画面が表示されます。
本ソフトの実行状況、マイコンピュータのプロパティ、IEのバージョン表示をプリントスクリーンした状態です。
GetVersionEx API(Windows 8.1,2012R2の実行時はマニフェストファイルを修正)
メンバー98SE2000XP2003R2Vista72008R288.120122012R2
dwMajorVersion45556666666
dwMinorVersion100120112323
dwBuildNumber677664462195260037906002760176019200960092009600
dwPlatformId12222222222
szCSDVersion AService Pack 4Service Pack 3Service Pack 2Service Pack 2Service Pack 1Service Pack 1
wProductType01131131133
wServicePackMajor04322110000
wServicePackMinor00000000000
Windows Server 2012R2 Datacenter 64bit(Virtual Box上の仮想マシーン)
Windows Server 2012 Standard 64bit(Virtual Box上の仮想マシーン)
Windows Server 2008 R2 Datacenter Service Pack 1 64bit(Virtual Box上の仮想マシーン)
Windows 8.1 Enterprise1 64bit
Windows 8 Enterprise1 64bit
Windows 7 Enterprise Service Pack 1 64bit
Windows 7 Enterprise Service Pack 1 32bit(Virtual Box上の仮想マシーン)
Windows VISTA Ulitimate Service Pack 2 32bit
Windows Server 2003R2 Enterprise Service Pack 2(Virtual Box上の仮想マシーン)
Windows XP Professional Service Pack 3 32bit(Virtual Box上の仮想マシーン)
Windows XP Home Editon Service Pack 3 32bit
Windows 2000 Professional Service Pack 4 32bit(Virtual Box上の仮想マシーン)
Windows 98 Second Editon 32bit(Virtual Box上の仮想マシーン)

プログラムソースの概要

manifest.xml

マニフェストファイルです。
特にマニフェストファイルを指定しない場合、GetVerrsionEx APIはWindows 8.1で実行してもWindows 8相当以上のバージョンを返しません。互換モードを設定している場合は、その影響も受けます。
マニフェストファイルでWindows 8.1に対応していることを明示するとWindows 8.1,Windows 2012R2を認識できるようになります。
ただし、マニフェストファイルを指定するとWindows 98SEでは実行できなくなります。いまどきWindows 98SEをサポートする必要はないかと思いますが、サービスパックやビルド番号が不要であれば、マニフェストファイルを埋め込まずにWindows 8相当が検出されたら、マニフェストの影響を受けないAPIでWindows 8.1であるか判断するなどの対応が必要です。

osver.cpp

WinMain

ダイアログボックスの表示を行います。

DlgProc

WM_INITDIALOG
ダイアログボックスの初期化時に呼び出されます。
get_WINDOWS_version関数を呼び出し、OSとIEのバージョンを取得し文字配列osnameに保存します。
各種DLLのバージョン番号を取得し、エディットボックスにOSとIEバージョンをあわせて表示します。
WM_COMMAND
ボタンをクリックしたときに呼び出されます。
IDC_BUTTON102
OKボタンをクリックしたときに呼び出されます。EndDialog APIでダイアログボックスを終了させます。
IDCANCEL
右上の×ボタンまたは、ESCキーを押したときに呼び出されます。EndDialog APIでダイアログボックスを終了させます。

get_WINDOWS_version

OSVERSIONINFO構造体のメンバーdwOSVersionInfoSizeに構造体サイズをセットした後、これを引数としてGetVersionEx APIを呼び出します。
OSVERSIONINFOEX構造体のメンバーdwOSVersionInfoSizeに構造体サイズをセットした後、これを引数としてGetVersionEx APIを呼び出します。Windows 9x系はこのAPIにOSVERSIONINFOEXを引数とすると正常に動作しません。
GetVersionEx APIはWindows 8.1では削除予定となりました。Windows 8.1以上でマニフェストファイルを修正せずに実行するとWindows 8相当が返ってきます。マニフェストを修正しない前提では、代わりにIsWindowsVersionOrGreater APIを用い判別する必要があります。
OSVERSIONINFO構造体のメンバーdwMajorVersionで大まかにバージョンを分類します。
OSVERSIONINFO::dwMajorVersion==4
OSVERSIONINFO::dwPlatformId==VER_PLATFORM_WIN32_WINDOWS
Windows 9x系なので、get_WINDOWS_9x関数によりさらに詳細のバージョンを特定します。
OSVERSIONINFO::dwPlatformId!=VER_PLATFORM_WIN32_WINDOWS
Windows NT 4.0とみなします。
OSVERSIONINFOEX::dwMajorVersion==5
OSVERSIONINFOEX::dwMinorVersion==0
Windows 2000なので、get_WINDOWS_2000関数でさらに詳細情報を取得します。
OSVERSIONINFOEX::dwMinorVersion==1
Windows XPなので、get_WINDOWS_XP関数でさらに詳細情報を取得します。
OSVERSIONINFOEX::dwMinorVersion==2
OSVERSIONINFOEX::wProductType == VER_NT_WORKSTATION Professional x64 Editionです。
OSVERSIONINFOEX::wProductType != VER_NT_WORKSTATION Windows 2003です。get_WINDOWS_2003関数でさらに詳細情報を取得します。
GetSystemMetrics(SM_SERVERR2)の結果により2003R2と無印を区別できます。
OSVERSIONINFOEX::dwMajorVersion==6
Vista以降はGetProductInfo APIが使えるのでこれを使用して詳細情報を取得します。
OSVERSIONINFOEX::dwMinorVersion==0
OSVERSIONINFOEX::wProductType== VER_NT_WORKSTATION Vistaです。
OSVERSIONINFOEX::wProductType!= VER_NT_WORKSTATION Server 2008です。
OSVERSIONINFOEX::dwMinorVersion==1
OSVERSIONINFOEX::wProductType== VER_NT_WORKSTATION 7です。
OSVERSIONINFOEX::wProductType!= VER_NT_WORKSTATION Server 2008R2です。
OSVERSIONINFOEX::dwMinorVersion==2
OSVERSIONINFOEX::wProductType== VER_NT_WORKSTATION 8です。
OSVERSIONINFOEX::wProductType!= VER_NT_WORKSTATION Server 2012です。
OSVERSIONINFOEX::dwMinorVersion==3
OSVERSIONINFOEX::wProductType== VER_NT_WORKSTATION 8.1です。
OSVERSIONINFOEX::wProductType!= VER_NT_WORKSTATION Server 2012R2です。

get_WINDOWS_9x

OSVERSIONINFO::dwMinorVersion==0
Windows 95です。OSVERSIONINFO::szCSDVersionにAとかBとか文字が入っているときは、OSRバージョンを示します。
A:OSR1,B:OSR2,C:OSR2.5
ただし、先頭に空白が入っている場合があるので、読み飛ばします。
OSVERSIONINFO::dwMinorVersion==10
Windows 98です。OSVERSIONINFO::szCSDVersionにAという文字が入っているときは、Second Editonを示します。
ただし、先頭に空白が入っている場合があるので、読み飛ばします。
OSVERSIONINFO::dwMinorVersion==90
Windows Meです。

get_WINDOWS_2000

OSVERSIONINFOEX::VER_NT_WORKSTATION,OSVERSIONINFOEX::wSuiteMask
上記のメンバー変数によりエディションを特定します。

get_WINDOWS_XP

GetSystemMetrics APIによりエディションを特定します。

get_WINDOWS_2003

OSVERSIONINFOEX::wSuiteMask
上記のメンバー変数によりエディションを特定します。

get_WINDOWS_VISTA_7_8

GetProductInfo APIによりエディションを特定します。
このAPIはVista以降でサポートされているため、APIを動的に呼び出しています。

get_file_version

DLLファイルのバージョンを取得します。

get_IE_version

レジストリよりIEのバージョンを取得します。

osver.h

Visual C++ 2005やVisual C++ 2008等で定義されていないマクロを定義します。
EDITION_TABLE vista 変数は、GetProductInfo APIの第3引数で返されるdwReturnedProductTypeの値と対応するエディション名の配列です。
osver.cppのget_WINDOWS_VISTA_7_8関数で使用しています。

ソースコード

osver.cpp

//	WindowsとIEのバージョンを表示
//  Visual C++ 2005 Expressでコンパイル Windows 98対応(マルチバイトでコンパイルすること)
//	Visual C++ 2008 Expressでコンパイル Windows 2000以上に対応
//	Visual C++ 2013 Expressでコンパイル Windows XP以上に対応

#include <windows.h>
#include <stdio.h>
#include <winver.h>
#include <commctrl.h>
#include <tchar.h>
#include "osver.h"
#include "resource.h"

#pragma comment(lib,"comctl32.lib")
#pragma comment(lib,"version.lib")


//	Windowsのバージョンを取得する
TCHAR* get_WINDOWS_version(TCHAR* buf,unsigned sz);

//	Windows 9x系のバージョンを取得
TCHAR* get_WINDOWS_9x(OSVERSIONINFO* os);

//	Windows 2000のエディションを取得
TCHAR* get_WINDOWS_2000(OSVERSIONINFOEX* os);

//	Windows XPのエディションを取得
TCHAR* get_WINDOWS_XP(OSVERSIONINFOEX* os);

//	Windows 2003のエディションを取得
TCHAR* get_WINDOWS_2003(OSVERSIONINFOEX* os,TCHAR** r,TCHAR** e);

//	Windows Vistaから8までのエディションを取得
TCHAR* get_WINDOWS_VISTA_7_8(OSVERSIONINFOEX* os);

//	DLLファイルのバージョンを取得
void get_file_version(TCHAR* path,int ver[4]);

//	インターネットエクスプローラーのバージョンを取得
TCHAR*	get_IE_version(TCHAR* buf,int sz);

//	ダイアログボックスプロシージャー
LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);


int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow){
	InitCommonControls();

//	ダイアログボックスの表示
	DialogBox(hCurInst, TEXT("DLG1"), 0, (DLGPROC)DlgProc);

	return (int)0;
}

//	ダイアログボックスプロシージャー

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){
	static HWND hEdit;
	TCHAR buf[1024];
	TCHAR ie[64];
	switch (msg) {
		case WM_INITDIALOG:{
			hEdit=GetDlgItem(hDlg,IDC_EDIT100);
			int sh[4],b[4],ms[4],u[4],win[4];
			TCHAR osname[256*256];
			TCHAR* os=get_WINDOWS_version(osname,sizeof(osname)/sizeof(TCHAR));
			get_file_version(_TEXT("ShDocVw.dll"),sh);
			get_file_version(_TEXT("BrowseUI.dll"),b);
			get_file_version(_TEXT("MSHTML.dll"),ms);
			get_file_version(_TEXT("URLMon.dll"),u);
			get_file_version(_TEXT("WinInet.dll"),win);
			_stprintf_s(buf,sizeof(buf)/sizeof(TCHAR),_TEXT("%s\r\nIExplore.exe %s\r\n")
						_TEXT("ShDocVw.dll  %i.%i.%i.%i\r\n")
								_TEXT("BrowseUI.dll %i.%i.%i.%i\r\n")
								_TEXT("MSHTML.dll   %i.%i.%i.%i\r\n")
								_TEXT("URLMon.dll   %i.%i.%i.%i\r\n")
								_TEXT("WinInet.dll  %i.%i.%i.%i\r\n"),
								osname,
								get_IE_version(ie,sizeof(ie)/sizeof(TCHAR)),
								sh[0],sh[1],sh[2],sh[3],
								b[0],b[1],b[2],b[3],
								ms[0],ms[1],ms[2],ms[3],
								u[0],u[1],u[2],u[3],
								win[0],win[1],win[2],win[3]);
			SetWindowText(hEdit , buf);
			return TRUE;
		}
		case WM_COMMAND:
			switch (LOWORD(wParam)) {
				case IDOK:{
					EndDialog(hDlg,TRUE);
					return TRUE;
				}
				case IDCANCEL:
					EndDialog(hDlg,TRUE);
					return TRUE;
				default:
					return FALSE;

			}
			default:
				return FALSE;
	}
	return TRUE;
}


void put_osversioninfo(TCHAR* buf,OSVERSIONINFO* o){
	if(o->dwOSVersionInfoSize==sizeof(OSVERSIONINFO)){
		_stprintf(	buf,
					_TEXT("GetVersion API\r\n")
					_TEXT(" OSVERSIONINFO.dwMajorVersion=%d\r\n")
					_TEXT(" OSVERSIONINFO.dwMinorVersion=%d\r\n")
					_TEXT(" OSVERSIONINFO.dwBuildNumber=%d\r\n")
					_TEXT(" OSVERSIONINFO.dwPlatformId=%d(0x%.8x)\r\n")
					_TEXT(" OSVERSIONINFO.szCSDVersion=%s"),
					o->dwMajorVersion,
					o->dwMinorVersion,
					o->dwBuildNumber,
					o->dwPlatformId,o->dwPlatformId,
					o->szCSDVersion);
	}else{
		OSVERSIONINFOEX* os=(OSVERSIONINFOEX*)o;
		_stprintf(	buf,
					_TEXT("GetVersionEx API\r\n")
					_TEXT(" OSVERSIONINFOEX.dwMajorVersion=%d\r\n")
					_TEXT(" OSVERSIONINFOEX.dwMinorVersion=%d\r\n")
					_TEXT(" OSVERSIONINFOEX.dwBuildNumber=%d\r\n")
					_TEXT(" OSVERSIONINFOEX.dwPlatformId=%d(0x%.8x)\r\n")
					_TEXT(" OSVERSIONINFOEX.szCSDVersion=%s\r\n")
					_TEXT(" OSVERSIONINFOEX.wProductType=%d(0x%.2x)\r\n")
					_TEXT(" OSVERSIONINFOEX.wServicePackMajor=%d\r\n")
					_TEXT(" OSVERSIONINFOEX.wServicePackMinor=%d\r\n"),
					os->dwMajorVersion,
					os->dwMinorVersion,
					os->dwBuildNumber,
					os->dwPlatformId,o->dwPlatformId,
					os->szCSDVersion,
					(DWORD)os->wProductType,(DWORD)os->wProductType,
					(DWORD)os->wServicePackMajor,
					(DWORD)os->wServicePackMinor);
	}
}


//	Windowsのバージョンを取得する

TCHAR* get_WINDOWS_version(TCHAR* buf,unsigned sz){
	TCHAR info[1024];
	OSVERSIONINFOEX os;
	OSVERSIONINFO o;
	OSVERSIONINFO* op=0;
	o.dwOSVersionInfoSize=sizeof(o);
	GetVersionEx(&o);
	buf[0]=_T('\0');
	os.dwOSVersionInfoSize=sizeof(os);
	if(GetVersionEx((OSVERSIONINFO *)&os)==0){	//	OSVERSIONINFOEXをサポートしていない場合
		op=&o;
	}else
		op=(OSVERSIONINFO*)&os;

	TCHAR* osname=_TEXT("");
	TCHAR* r=_TEXT("");
	switch(o.dwMajorVersion){
		case 4:{
			if(o.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS){
				osname=get_WINDOWS_9x(&o);
				_stprintf_s(buf,sz,_TEXT("Windows %s\r\n"),osname);
			}else{
				_stprintf_s(buf,sz,_TEXT("Windows NT 4.0\r\n"));
			}
			put_osversioninfo(info,op);
			_tcscat(buf,info);
			break;
		}
		case 5:{
			TCHAR* e=_TEXT("");
			switch(os.dwMinorVersion){
			case 0:
				osname=_TEXT("2000");
				e=get_WINDOWS_2000(&os);
				break;
			case 1:
				osname=_TEXT("XP");
				e=get_WINDOWS_XP(&os);
				break;
			case 2:
				if(os.wProductType == VER_NT_WORKSTATION){
					osname=_TEXT("XP");
					e=_TEXT("Professional x64 Edition");
				}else{
					osname=get_WINDOWS_2003(&os,&r,&e);
				}
				break;
			}
			_stprintf_s(buf,sz,_TEXT("Windows %s%s %s %s Build %d\r\n"),osname,r,e,os.szCSDVersion,os.dwBuildNumber);
			put_osversioninfo(info,op);
			_tcscat(buf,info);
			break;
		}
		case 6:{
			TCHAR *e=get_WINDOWS_VISTA_7_8(&os);
			switch(os.dwMinorVersion){
			case 0:
				if(os.wProductType == VER_NT_WORKSTATION)
					osname=_TEXT("Vista");
				else
					osname=_TEXT("Server 2008");
				break;
			case 1:
				if(os.wProductType == VER_NT_WORKSTATION)
					osname=_TEXT("7");
				else
					osname=_TEXT("Server 2008R2");
				break;
			case 2:
				if(os.wProductType == VER_NT_WORKSTATION)
					osname=_TEXT("8");
				else
					osname=_TEXT("Server 2012");
				break;
			case 3:
				if (os.wProductType != VER_NT_WORKSTATION)
					osname = _TEXT("Server 2012R2");
				else
					osname = _TEXT("8.1");
				break;
			}
			_stprintf_s(buf,sz,_TEXT("Windows %s %s %s Build %d\r\n"),osname,e,os.szCSDVersion,os.dwBuildNumber);
			put_osversioninfo(info,op);
			_tcscat(buf,info);
			break;
		}
	}
	return buf;
}

//	Windows 9x系のバージョンを取得

TCHAR* get_WINDOWS_9x(OSVERSIONINFO* os){
	int c=0;
	TCHAR* p=os->szCSDVersion;
	while(*p){
		if(*p!=_T(' ')){
			c=*p;
			break;
		}
		++p;
	}

	switch(os->dwMinorVersion){
		case 0:{
			switch(c){
				case _T('A'):
					return _TEXT("95 OSR1");
				case _T('B'):
					return _TEXT("95 OSR2");
				case _T('C'):
					return _TEXT("95 OSR2.5");
				default:
					return _TEXT("95");
			}
		}
		case 10:
			switch(c){
				case _T('A'):
					return _TEXT("98 Second Edition");
				default:
					return _TEXT("98");
			}
		case 90:
			return _TEXT("Me");
	}
	return _TEXT("");
}

//	Windows 2000のエディションを取得

TCHAR* get_WINDOWS_2000(OSVERSIONINFOEX* os){
	if(os->wProductType == VER_NT_WORKSTATION)
		return _TEXT("Professional");
	else if(os->wSuiteMask & VER_SUITE_DATACENTER)
		return _TEXT("Datacenter");
	else if(os->wSuiteMask & VER_SUITE_ENTERPRISE)
		return _TEXT("Advanced");
	else
		return _TEXT("Sever");
}

//	Windows XPのエディションを取得

TCHAR* get_WINDOWS_XP(OSVERSIONINFOEX* os){
	if(GetSystemMetrics(SM_TABLETPC))
		return _TEXT("Tablet PC Edition");
	else if(GetSystemMetrics(SM_MEDIACENTER))
		return _TEXT("Media Center Edition");
	else if(GetSystemMetrics(SM_STARTER))
		return _TEXT("Starter Edition");
	else if(os->wSuiteMask & VER_SUITE_PERSONAL)
		return _TEXT("Home Edition");
	else if(os->wSuiteMask & (VER_SUITE_EMBEDDEDNT | VER_SUITE_EMBEDDED_RESTRICTED))
		return _TEXT("Embedded");
	else
		return _TEXT("Professional");
}

//	Windows 2003のエディションを取得

TCHAR* get_WINDOWS_2003(OSVERSIONINFOEX* os,TCHAR** r,TCHAR** e){
	TCHAR* osname=TEXT("");
	if(os->wSuiteMask & VER_SUITE_COMPUTE_SERVER)
		return _TEXT("Computer Cluster Server 2003");
	else if(os->wSuiteMask & VER_SUITE_WH_SERVER)
		return _TEXT("Home Server");
	if(os->wSuiteMask & (VER_SUITE_SMALLBUSINESS | VER_SUITE_SMALLBUSINESS_RESTRICTED))
		osname=_TEXT("Small Business Server 2003");
	else if(os->wSuiteMask & VER_SUITE_STORAGE_SERVER)
		osname=_TEXT("Storage Server 2003");
	else
		osname=_TEXT("Server 2003");
	*e=_TEXT("");
	if(os->wSuiteMask & VER_SUITE_DATACENTER)
		*e=_TEXT("Datacenter");
	else if(os->wSuiteMask & VER_SUITE_ENTERPRISE)
		*e=_TEXT("Enterprise");
	else if(os->wSuiteMask & VER_SUITE_BLADE)
		*e=_TEXT("Web");
	else
		*e=_TEXT("Standard");

	if( GetSystemMetrics(SM_SERVERR2))	// 2003R2
		*r=_TEXT("R2");
	else	//	2003
		*r=_TEXT("");

	return osname;
}

//	Windows Vistaから8までのエディションを取得

TCHAR* get_WINDOWS_VISTA_7_8(OSVERSIONINFOEX* os){

//	GetProductInfoはVista以降のOSでしかサポートされていないのでXP等で実行するとエントリーポイントが見つからないというエラーが出るので動的に呼び出す。
	typedef BOOL (WINAPI *pGetProductInfo)(DWORD, DWORD, DWORD, DWORD, PDWORD);
	pGetProductInfo p = (pGetProductInfo)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo");
	
	DWORD dwReturnedProductType;
	p( os->dwMajorVersion , os->dwMinorVersion , os->wServicePackMajor , os->wServicePackMinor , &dwReturnedProductType);
//	エディションを検索する
	TCHAR* e=0;
	for(int n=0;vista[n].name;n++){
		if(dwReturnedProductType==vista[n].dw){
			e=vista[n].name;
			break;
		}
	}
	return e;
}

//	DLLファイルのバージョンを取得

void get_file_version(TCHAR* path,int ver[4]){
	VS_FIXEDFILEINFO* v;
	DWORD dwZero = 0;
	UINT len;
	DWORD sz=GetFileVersionInfoSize(path,&dwZero);
	TCHAR* buf=new TCHAR[sz];
	GetFileVersionInfo(path,dwZero,sz,buf);

	if(VerQueryValue(buf,TEXT("\\"),(LPVOID*)&v,&len)){
		ver[0]=int(HIWORD(v->dwFileVersionMS));
		ver[1]=int(LOWORD(v->dwFileVersionMS));
		ver[2]=int(HIWORD(v->dwFileVersionLS));
		ver[3]=int(LOWORD(v->dwFileVersionLS));
	}
	delete buf;

}

//	インターネットエクスプローラーのバージョンを取得

TCHAR*	get_IE_version(TCHAR* buf,int sz){
	DWORD	dwType;
	ULONG	nSize;
	HKEY	hKey;

	dwType = REG_SZ;
	nSize = 256;
	hKey = NULL;
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE
		,_TEXT("Software\\Microsoft\\Internet Explorer")
		,0,KEY_READ,&hKey)==ERROR_SUCCESS){
		if(RegQueryValueEx(hKey,_TEXT("SvcVersion"),NULL,&dwType,(LPBYTE)buf,&nSize)==ERROR_SUCCESS){ // IE10以上で定義されている
			RegCloseKey(hKey);
		}else{
			if(RegQueryValueEx(hKey,_TEXT("Version"),NULL,&dwType,(LPBYTE)buf,&nSize)==ERROR_SUCCESS){
				RegCloseKey(hKey);
			}
		}
		return  buf;
	}else
		return 0;
} 

osver.h


resource.h

#ifndef PRODUCT_BUSINESS 
  #define PRODUCT_BUSINESS 0x00000006 //Business
#endif
#ifndef PRODUCT_BUSINESS_N 
  #define PRODUCT_BUSINESS_N 0x00000010 //Business N
#endif
#ifndef PRODUCT_CLUSTER_SERVER 
  #define PRODUCT_CLUSTER_SERVER 0x00000012 //HPC Edition
#endif
#ifndef PRODUCT_CLUSTER_SERVER_V 
  #define PRODUCT_CLUSTER_SERVER_V 0x00000040 //Server Hyper Core V
#endif
#ifndef PRODUCT_CORE 
  #define PRODUCT_CORE 0x00000065 //Windows 8
#endif
#ifndef PRODUCT_CORE_COUNTRYSPECIFIC 
  #define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063 //Windows 8 China
#endif
#ifndef PRODUCT_CORE_N 
  #define PRODUCT_CORE_N 0x00000062 //Windows 8 N
#endif
#ifndef PRODUCT_CORE_SINGLELANGUAGE 
  #define PRODUCT_CORE_SINGLELANGUAGE 0x00000064 //Windows 8 Single Language
#endif
#ifndef PRODUCT_DATACENTER_EVALUATION_SERVER 
  #define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050 //Server Datacenter (evaluation installation)
#endif
#ifndef PRODUCT_DATACENTER_SERVER 
  #define PRODUCT_DATACENTER_SERVER 0x00000008 //Server Datacenter (full installation)
#endif
#ifndef PRODUCT_DATACENTER_SERVER_CORE 
  #define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C //Server Datacenter (core installation)
#endif
#ifndef PRODUCT_DATACENTER_SERVER_CORE_V 
  #define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027 //Server Datacenter without Hyper-V (core installation)
#endif
#ifndef PRODUCT_DATACENTER_SERVER_V 
  #define PRODUCT_DATACENTER_SERVER_V 0x00000025 //Server Datacenter without Hyper-V (full installation)
#endif
#ifndef PRODUCT_ENTERPRISE 
  #define PRODUCT_ENTERPRISE 0x00000004 //Enterprise
#endif
#ifndef PRODUCT_ENTERPRISE_E 
  #define PRODUCT_ENTERPRISE_E 0x00000046 //Not supported
#endif
#ifndef PRODUCT_ENTERPRISE_EVALUATION 
  #define PRODUCT_ENTERPRISE_EVALUATION 0x00000048 //Server Enterprise (evaluation installation)
#endif
#ifndef PRODUCT_ENTERPRISE_N 
  #define PRODUCT_ENTERPRISE_N 0x0000001B //Enterprise N
#endif
#ifndef PRODUCT_ENTERPRISE_N_EVALUATION 
  #define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054 //Enterprise N (evaluation installation)
#endif
#ifndef PRODUCT_ENTERPRISE_SERVER 
  #define PRODUCT_ENTERPRISE_SERVER 0x0000000A //Server Enterprise (full installation)
#endif
#ifndef PRODUCT_ENTERPRISE_SERVER_CORE 
  #define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E //Server Enterprise (core installation)
#endif
#ifndef PRODUCT_ENTERPRISE_SERVER_CORE_V 
  #define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029 //Server Enterprise without Hyper-V (core installation)
#endif
#ifndef PRODUCT_ENTERPRISE_SERVER_IA64 
  #define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F //Server Enterprise for Itanium-based Systems
#endif
#ifndef PRODUCT_ENTERPRISE_SERVER_V 
  #define PRODUCT_ENTERPRISE_SERVER_V 0x00000026 //Server Enterprise without Hyper-V (full installation)
#endif
#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 
  #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C //Windows Essential Server Solution Additional
#endif
#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 
  #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E //Windows Essential Server Solution Additional SVC
#endif
#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 
  #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B //Windows Essential Server Solution Management
#endif
#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 
  #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D //Windows Essential Server Solution Management SVC
#endif
#ifndef PRODUCT_HOME_BASIC 
  #define PRODUCT_HOME_BASIC 0x00000002 //Home Basic
#endif
#ifndef PRODUCT_HOME_BASIC_E 
  #define PRODUCT_HOME_BASIC_E 0x00000043 //Not supported
#endif
#ifndef PRODUCT_HOME_BASIC_N 
  #define PRODUCT_HOME_BASIC_N 0x00000005 //Home Basic N
#endif
#ifndef PRODUCT_HOME_PREMIUM 
  #define PRODUCT_HOME_PREMIUM 0x00000003 //Home Premium
#endif
#ifndef PRODUCT_HOME_PREMIUM_E 
  #define PRODUCT_HOME_PREMIUM_E 0x00000044 //Not supported
#endif
#ifndef PRODUCT_HOME_PREMIUM_N 
  #define PRODUCT_HOME_PREMIUM_N 0x0000001A //Home Premium N
#endif
#ifndef PRODUCT_HOME_PREMIUM_SERVER 
  #define PRODUCT_HOME_PREMIUM_SERVER 0x00000022 //Windows Home Server 2011
#endif
#ifndef PRODUCT_HOME_SERVER 
  #define PRODUCT_HOME_SERVER 0x00000013 //Windows Storage Server 2008 R2 Essentials
#endif
#ifndef PRODUCT_HYPERV 
  #define PRODUCT_HYPERV 0x0000002A //Microsoft Hyper-V Server
#endif
#ifndef PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 
  #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E //Windows Essential Business Server Management Server
#endif
#ifndef PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 
  #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020 //Windows Essential Business Server Messaging Server
#endif
#ifndef PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 
  #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F //Windows Essential Business Server Security Server
#endif
#ifndef PRODUCT_MULTIPOINT_PREMIUM_SERVER 
  #define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D //Windows MultiPoint Server Premium (full installation)
#endif
#ifndef PRODUCT_MULTIPOINT_STANDARD_SERVER 
  #define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C //Windows MultiPoint Server Standard (full installation)
#endif
#ifndef PRODUCT_PROFESSIONAL 
  #define PRODUCT_PROFESSIONAL 0x00000030 //Professional
#endif
#ifndef PRODUCT_PROFESSIONAL_E 
  #define PRODUCT_PROFESSIONAL_E 0x00000045 //Not supported
#endif
#ifndef PRODUCT_PROFESSIONAL_N 
  #define PRODUCT_PROFESSIONAL_N 0x00000031 //Professional N
#endif
#ifndef PRODUCT_PROFESSIONAL_WMC 
  #define PRODUCT_PROFESSIONAL_WMC 0x00000067 //Professional with Media Center
#endif
#ifndef PRODUCT_SB_SOLUTION_SERVER 
  #define PRODUCT_SB_SOLUTION_SERVER 0x00000032 //Windows Small Business Server 2011 Essentials
#endif
#ifndef PRODUCT_SB_SOLUTION_SERVER_EM 
  #define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036 //Server For SB Solutions EM
#endif
#ifndef PRODUCT_SERVER_FOR_SB_SOLUTIONS 
  #define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033 //Server For SB Solutions
#endif
#ifndef PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 
  #define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037 //Server For SB Solutions EM
#endif
#ifndef PRODUCT_SERVER_FOR_SMALLBUSINESS 
  #define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018 //Windows Server 2008 for Windows Essential Server Solutions
#endif
#ifndef PRODUCT_SERVER_FOR_SMALLBUSINESS_V 
  #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023 //Windows Server 2008 without Hyper-V for Windows Essential Server Solutions
#endif
#ifndef PRODUCT_SERVER_FOUNDATION 
  #define PRODUCT_SERVER_FOUNDATION 0x00000021 //Server Foundation
#endif
#ifndef PRODUCT_SMALLBUSINESS_SERVER 
  #define PRODUCT_SMALLBUSINESS_SERVER 0x00000009 //Windows Small Business Server
#endif
#ifndef PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 
  #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019 //Small Business Server Premium
#endif
#ifndef PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 
  #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F //Small Business Server Premium (core installation)
#endif
#ifndef PRODUCT_SOLUTION_EMBEDDEDSERVER 
  #define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038 //Windows MultiPoint Server
#endif
#ifndef PRODUCT_STANDARD_EVALUATION_SERVER 
  #define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F //Server Standard (evaluation installation)
#endif
#ifndef PRODUCT_STANDARD_SERVER 
  #define PRODUCT_STANDARD_SERVER 0x00000007 //Server Standard
#endif
#ifndef PRODUCT_STANDARD_SERVER_CORE 
  #define PRODUCT_STANDARD_SERVER_CORE  0x0000000D //Server Standard (core installation)
#endif
#ifndef PRODUCT_STANDARD_SERVER_CORE_V 
  #define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028 //Server Standard without Hyper-V (core installation)
#endif
#ifndef PRODUCT_STANDARD_SERVER_SOLUTIONS 
  #define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034 //Server Solutions Premium
#endif
#ifndef PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 
  #define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035 //Server Solutions Premium (core installation)
#endif
#ifndef PRODUCT_STANDARD_SERVER_V 
  #define PRODUCT_STANDARD_SERVER_V 0x00000024 //Server Standard without Hyper-V
#endif
#ifndef PRODUCT_STARTER 
  #define PRODUCT_STARTER 0x0000000B //Starter
#endif
#ifndef PRODUCT_STARTER_E 
  #define PRODUCT_STARTER_E 0x00000042 //Not supported
#endif
#ifndef PRODUCT_STARTER_N 
  #define PRODUCT_STARTER_N 0x0000002F //Starter N
#endif
#ifndef PRODUCT_STORAGE_ENTERPRISE_SERVER 
  #define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017 //Storage Server Enterprise
#endif
#ifndef PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 
  #define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E //Storage Server Enterprise (core installation)
#endif
#ifndef PRODUCT_STORAGE_EXPRESS_SERVER 
  #define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014 //Storage Server Express
#endif
#ifndef PRODUCT_STORAGE_EXPRESS_SERVER_CORE 
  #define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B //Storage Server Express (core installation)
#endif
#ifndef PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 
  #define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060 //Storage Server Standard (evaluation installation)
#endif
#ifndef PRODUCT_STORAGE_STANDARD_SERVER 
  #define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015 //Storage Server Standard
#endif
#ifndef PRODUCT_STORAGE_STANDARD_SERVER_CORE 
  #define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C //Storage Server Standard (core installation)
#endif
#ifndef PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 
  #define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F //Storage Server Workgroup (evaluation installation)
#endif
#ifndef PRODUCT_STORAGE_WORKGROUP_SERVER 
  #define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016 //Storage Server Workgroup
#endif
#ifndef PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 
  #define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D //Storage Server Workgroup (core installation)
#endif
#ifndef PRODUCT_ULTIMATE 
  #define PRODUCT_ULTIMATE 0x00000001 //Ultimate
#endif
#ifndef PRODUCT_ULTIMATE_E 
  #define PRODUCT_ULTIMATE_E 0x00000047 //Not supported
#endif
#ifndef PRODUCT_ULTIMATE_N 
  #define PRODUCT_ULTIMATE_N 0x0000001C //Ultimate N
#endif
#ifndef PRODUCT_UNDEFINED 
  #define PRODUCT_UNDEFINED 0x00000000 //An unknown product
#endif
#ifndef PRODUCT_WEB_SERVER 
  #define PRODUCT_WEB_SERVER 0x00000011 //Web Server (full installation)
#endif
#ifndef PRODUCT_WEB_SERVER_CORE 
  #define PRODUCT_WEB_SERVER_CORE 0x0000001D //Web Server (core installation)
#endif

#ifndef VER_SUITE_WH_SERVER
  #define VER_SUITE_WH_SERVER 0x00008000
#endif

#ifndef SM_TABLEPC
	#define SM_TABLETPC             86
#endif
#ifndef  SM_MEDIACENTER
	#define SM_MEDIACENTER          87
#endif
#ifndef SM_STARTER
	#define SM_STARTER              88
#endif


#ifndef SM_SERVERR2
	#define SM_SERVERR2				89
#endif

struct EDITION_TABLE{
	DWORD dw;
	TCHAR* name;
};

EDITION_TABLE vista[]={ 
{ PRODUCT_BUSINESS , _TEXT("Business" ) },
{ PRODUCT_BUSINESS_N , _TEXT("Business N" ) },
{ PRODUCT_CLUSTER_SERVER , _TEXT("HPC Edition" ) },
{ PRODUCT_CLUSTER_SERVER_V , _TEXT("Server Hyper Core V" ) },
{ PRODUCT_CORE , _TEXT("Windows 8" ) },
{ PRODUCT_CORE_N , _TEXT("Windows 8 N" ) },
{ PRODUCT_CORE_COUNTRYSPECIFIC , _TEXT("Windows 8 China" ) },
{ PRODUCT_CORE_SINGLELANGUAGE , _TEXT("Windows 8 Single Language" ) },
{ PRODUCT_DATACENTER_EVALUATION_SERVER , _TEXT("Server Datacenter (evaluation installation)" ) },
{ PRODUCT_DATACENTER_SERVER , _TEXT("Server Datacenter (full installation)" ) },
{ PRODUCT_DATACENTER_SERVER_CORE , _TEXT("Server Datacenter (core installation)" ) },
{ PRODUCT_DATACENTER_SERVER_CORE_V , _TEXT("Server Datacenter without Hyper-V (core installation)" ) },
{ PRODUCT_DATACENTER_SERVER_V , _TEXT("Server Datacenter without Hyper-V (full installation)" ) },
{ PRODUCT_ENTERPRISE , _TEXT("Enterprise" ) },
{ PRODUCT_ENTERPRISE_E , _TEXT("Not supported" ) },
{ PRODUCT_ENTERPRISE_N_EVALUATION , _TEXT("Enterprise N (evaluation installation)" ) },
{ PRODUCT_ENTERPRISE_N , _TEXT("Enterprise N" ) },
{ PRODUCT_ENTERPRISE_EVALUATION , _TEXT("Server Enterprise (evaluation installation)" ) },
{ PRODUCT_ENTERPRISE_SERVER , _TEXT("Server Enterprise (full installation)" ) },
{ PRODUCT_ENTERPRISE_SERVER_CORE , _TEXT("Server Enterprise (core installation)" ) },
{ PRODUCT_ENTERPRISE_SERVER_CORE_V , _TEXT("Server Enterprise without Hyper-V (core installation)" ) },
{ PRODUCT_ENTERPRISE_SERVER_IA64 , _TEXT("Server Enterprise for Itanium-based Systems" ) },
{ PRODUCT_ENTERPRISE_SERVER_V , _TEXT("Server Enterprise without Hyper-V (full installation)" ) },
{ PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT , _TEXT("Windows Essential Server Solution Management" ) },
{ PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL , _TEXT("Windows Essential Server Solution Additional" ) },
{ PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC , _TEXT("Windows Essential Server Solution Management SVC" ) },
{ PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC , _TEXT("Windows Essential Server Solution Additional SVC" ) },
{ PRODUCT_HOME_BASIC , _TEXT("Home Basic" ) },
{ PRODUCT_HOME_BASIC_E , _TEXT("Not supported" ) },
{ PRODUCT_HOME_BASIC_N , _TEXT("Home Basic N" ) },
{ PRODUCT_HOME_PREMIUM , _TEXT("Home Premium" ) },
{ PRODUCT_HOME_PREMIUM_E , _TEXT("Not supported" ) },
{ PRODUCT_HOME_PREMIUM_N , _TEXT("Home Premium N" ) },
{ PRODUCT_HOME_PREMIUM_SERVER , _TEXT("Windows Home Server 2011" ) },
{ PRODUCT_HOME_SERVER , _TEXT("Windows Storage Server 2008 R2 Essentials" ) },
{ PRODUCT_HYPERV , _TEXT("Microsoft Hyper-V Server" ) },
{ PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT , _TEXT("Windows Essential Business Server Management Server" ) },
{ PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING , _TEXT("Windows Essential Business Server Messaging Server" ) },
{ PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY , _TEXT("Windows Essential Business Server Security Server" ) },
{ PRODUCT_MULTIPOINT_STANDARD_SERVER , _TEXT("Windows MultiPoint Server Standard (full installation)" ) },
{ PRODUCT_MULTIPOINT_PREMIUM_SERVER , _TEXT("Windows MultiPoint Server Premium (full installation)" ) },
{ PRODUCT_PROFESSIONAL , _TEXT("Professional" ) },
{ PRODUCT_PROFESSIONAL_E , _TEXT("Not supported" ) },
{ PRODUCT_PROFESSIONAL_N , _TEXT("Professional N" ) },
{ PRODUCT_PROFESSIONAL_WMC , _TEXT("Professional with Media Center" ) },
{ PRODUCT_SB_SOLUTION_SERVER_EM , _TEXT("Server For SB Solutions EM" ) },
{ PRODUCT_SERVER_FOR_SB_SOLUTIONS , _TEXT("Server For SB Solutions" ) },
{ PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM , _TEXT("Server For SB Solutions EM" ) },
{ PRODUCT_SERVER_FOR_SMALLBUSINESS , _TEXT("Windows Server 2008 for Windows Essential Server Solutions" ) },
{ PRODUCT_SERVER_FOR_SMALLBUSINESS_V , _TEXT("Windows Server 2008 without Hyper-V for Windows Essential Server Solutions" ) },
{ PRODUCT_SERVER_FOUNDATION , _TEXT("Server Foundation" ) },
{ PRODUCT_SB_SOLUTION_SERVER , _TEXT("Windows Small Business Server 2011 Essentials" ) },
{ PRODUCT_SMALLBUSINESS_SERVER , _TEXT("Windows Small Business Server" ) },
{ PRODUCT_SMALLBUSINESS_SERVER_PREMIUM , _TEXT("Small Business Server Premium" ) },
{ PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE , _TEXT("Small Business Server Premium (core installation)" ) },
{ PRODUCT_SOLUTION_EMBEDDEDSERVER , _TEXT("Windows MultiPoint Server" ) },
{ PRODUCT_STANDARD_EVALUATION_SERVER , _TEXT("Server Standard (evaluation installation)" ) },
{ PRODUCT_STANDARD_SERVER , _TEXT("Server Standard" ) },
{ PRODUCT_STANDARD_SERVER_CORE  , _TEXT("Server Standard (core installation)" ) },
{ PRODUCT_STANDARD_SERVER_V , _TEXT("Server Standard without Hyper-V" ) },
{ PRODUCT_STANDARD_SERVER_CORE_V , _TEXT("Server Standard without Hyper-V (core installation)" ) },
{ PRODUCT_STANDARD_SERVER_SOLUTIONS , _TEXT("Server Solutions Premium" ) },
{ PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE , _TEXT("Server Solutions Premium (core installation)" ) },
{ PRODUCT_STARTER , _TEXT("Starter" ) },
{ PRODUCT_STARTER_E , _TEXT("Not supported" ) },
{ PRODUCT_STARTER_N , _TEXT("Starter N" ) },
{ PRODUCT_STORAGE_ENTERPRISE_SERVER , _TEXT("Storage Server Enterprise" ) },
{ PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE , _TEXT("Storage Server Enterprise (core installation)" ) },
{ PRODUCT_STORAGE_EXPRESS_SERVER , _TEXT("Storage Server Express" ) },
{ PRODUCT_STORAGE_EXPRESS_SERVER_CORE , _TEXT("Storage Server Express (core installation)" ) },
{ PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER , _TEXT("Storage Server Standard (evaluation installation)" ) },
{ PRODUCT_STORAGE_STANDARD_SERVER , _TEXT("Storage Server Standard" ) },
{ PRODUCT_STORAGE_STANDARD_SERVER_CORE , _TEXT("Storage Server Standard (core installation)" ) },
{ PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER , _TEXT("Storage Server Workgroup (evaluation installation)" ) },
{ PRODUCT_STORAGE_WORKGROUP_SERVER , _TEXT("Storage Server Workgroup" ) },
{ PRODUCT_STORAGE_WORKGROUP_SERVER_CORE , _TEXT("Storage Server Workgroup (core installation)" ) },
{ PRODUCT_UNDEFINED , _TEXT("An unknown product" ) },
{ PRODUCT_ULTIMATE , _TEXT("Ultimate" ) },
{ PRODUCT_ULTIMATE_E , _TEXT("Not supported" ) },
{ PRODUCT_ULTIMATE_N , _TEXT("Ultimate N" ) },
{ PRODUCT_WEB_SERVER , _TEXT("Web Server (full installation)" ) },
{ PRODUCT_WEB_SERVER_CORE , _TEXT("Web Server (core installation)" ) },
{ -1 , 0 }};

#if 1600<=_MSC_VER	//	Visual C++ 2010以上
	#pragma warning(disable : 4996)	// GetVersionExが古い形式として宣言されましたを回避
	#include <versionHelpers.h>
#endif

resource.h

#define	IDC_EDIT100		100
#define	IDC_BUTTON102		102

resource.rc

#include <windows.h>
#include "resource.h"


DLG1 DIALOG DISCARDABLE 0, 0, 300, 200
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP| WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT

CAPTION "OSVersion"
FONT 9, "MS 明朝"
{
// CONTROL "バージョン", -11, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 7, 7, 54, 12
 CONTROL "", IDC_EDIT100, "EDIT", WS_CHILD | WS_DLGFRAME | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL
                                  | ES_AUTOHSCROLL  | ES_AUTOVSCROLL 
			| ES_MULTILINE | ES_READONLY, 7, 7, 286,161

 CONTROL "OK(&O)", IDOK, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 123, 175, 54, 18
}

manifest.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
        <application> 
            <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
            <!-- Windows 8.1 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
        </application> 
    </compatibility>
</assembly>

実行ファイルとソースファイルのダウンロード(マニフェストを埋め込んでいる)

実行ファイル(マニフェストが埋め込まれていない)