Microsoft DirectX 8.0 (C++) |
アプリケーションでは、Microsoft® DirectX® のバージョンだけでなく、それが実行されているオペレーティング システムやインストールされているサービス パックの情報が必要になる場合がある。オペレーティング システムのバージョンを調べるには、Microsoft Windows® 関数の GetVersionEx を使用するとよい。この関数は、次の各種情報を含む OSVERSIONINFO 構造体を返す。
アプリケーションが対応している最も古いオペレーティング システムについて調べるのが一般的である。そのバージョン以降がインストールされていれば、インストールしたアプリケーションは正常に実行される。
注 GetVersionEx によって返されるオペレーティング システム情報は、DirectX の存在またはバージョン番号を調べるテストには使用できない。特に、システムが Windows NT ベースであるからといって、DirectX が存在しないとは限らない。たとえば、Windows 2000 オペレーティング システムには DirectX 7.0 以降が含まれている。Windows NT ベースのオペレーティング システムの今後のバージョンでも、DirectX のバージョンが含まれるものと予測される。DirectX の存在とバージョン番号は、前のトピックで説明した手順で調べる必要がある。
次のサンプル関数は、GetVersionEx を使ってオペレーティング システムのバージョンをテストする方法を示している。インストールされているバージョンがパラメータ リストに指定されているバージョン以降であれば、関数は TRUE を返す。この場合、インストールしたアプリケーションは正常に実行される。それ以外の場合、関数は FALSE を返す。これは、アプリケーションをインストールしても正しく実行されないことを意味する。
#include <windows.h> #include <stdio.h> #include <tchar.h> BOOL bIsWindowsVersionOK( DWORD dwWin9xMajor, DWORD dwWin9xMinor, DWORD dwWinNTMajor, DWORD dwWinNTMinor, WORD wWinNTSPMajor ) { OSVERSIONINFO osvi; // OSVERSIONINFO 構造体を初期化する。 ZeroMemory( &osvi, sizeof( osvi ) ); osvi.dwOSVersionInfoSize = sizeof( osvi ); GetVersionEx( &osvi ); // この関数が成功したと仮定する。 // コードのパスを NT の場合と Win9x の場合に分ける。 if( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) { // メジャー バージョンをチェックする。 if( osvi.dwMajorVersion > dwWin9xMajor ) return TRUE; else if( osvi.dwMajorVersion == dwWin9xMajor ) { // マイナー バージョンをチェックする。 if( osvi.dwMinorVersion >= dwWin9xMinor ) return TRUE; } } else if( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT ) { // メジャー バージョンをチェックする。 if( osvi.dwMajorVersion > dwWinNTMajor ) return TRUE; else if( osvi.dwMajorVersion == dwWinNTMajor ) { // マイナー バージョンをチェックする。 if( osvi.dwMinorVersion > dwWinNTMinor ) return TRUE; else if( osvi.dwMinorVersion == dwWinNTMinor ) { // サービス パックをチェックする。 DWORD dwServicePack = 0; if( osvi.szCSDVersion ) { _stscanf( osvi.szCSDVersion, _T("Service Pack %d"), &dwServicePack ); } return ( dwServicePack >= wWinNTSPMajor ); } } } return FALSE; }