WindowsとIEのバージョンを表示(Windowsはエディション,ビルド番号表示対応)

icon 項目のみ表示/展開表示の切り替え

概要

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の実行時はマニフェストファイルを修正)
メンバー 98SE 2000 XP 2003R2 Vista 7 2008R2 8 8.1 2012 2012R2
dwMajorVersion 4 5 5 5 6 6 6 6 6 6 6
dwMinorVersion 10 0 1 2 0 1 1 2 3 2 3
dwBuildNumber 67766446 2195 2600 3790 6002 7601 7601 9200 9600 9200 9600
dwPlatformId 1 2 2 2 2 2 2 2 2 2 2
szCSDVersion A Service Pack 4 Service Pack 3 Service Pack 2 Service Pack 2 Service Pack 1 Service Pack 1
wProductType 0 1 1 3 1 1 3 1 1 3 3
wServicePackMajor 0 4 3 2 2 1 1 0 0 0 0
wServicePackMinor 0 0 0 0 0 0 0 0 0 0 0

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>

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

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