アークピットのホームページに戻る

WinAPIトピックのトップページに戻る

APIトピックの各章に移動する

ダウンロードのページに移動する
ダウンロードができ
ない場合の対処法
 

ページ移動

2-1-9. OS環境を判断して対象外を除外する

 Windowsは、Windows 3.1 のWIN16環境、そして Windows 9x や NT のWIN32の環境があります。これらは、APIが少しずつ異なり、すべてに対応するのは困難です。現在の環境を判断し、対象外の場合の対象法を考えます。

OSの種類

OS レベル 説明
Windows 3.1 WIN16 16ビットのWindowsの最終版で、現在でも利用者がいます。しかし段々すたれるでしょう。
Windows 3.1 WIN32S Windows 3.1 で特別なモジュールを導入することで、32ビット環境のソフトを実行できます。しかしAPI はWIN32のサブセットで制限が多少あります。
Windows 95 WIN32 現在のデスクトップの標準環境で、一番利用者が多いOSです。たぶんこの環境が対象になるでしょう。
Windows 98 WIN32 最新のデスクトップの環境です。同じWIN32ですが、コモンコントロールなどの追加モジュールに拡張がありまが、API は、Windows95と互換と考えても結構です。
Windows NT
3.51以上
WIN32 サーバか企業のデスクトップ環境に多いOSです。WIN32と言う名称ですが、Windows 9x のWIN32とは仕様がやや異なります。今後の中心になりそうなOSです。

OSの種類の判断

 上記のOSの内、アプリケーションが実行している環境を調査することは、以下のマクロで簡単に判別できます。ただし下記マクロでは、Windows 95 と Windows 98 は区別しません。
#if defined (WIN32)
    #define IS_WIN32 TRUE
#else
    #define IS_WIN32 FALSE
#endif
#define IS_NT      (IS_WIN32&&(BOOL)(GetVersion() < 0x80000000))
#define IS_WIN32S  (IS_WIN32&&(BOOL)(!(IS_NT) \
                    && (LOBYTE(LOWORD(GetVersion()))<4)))
#define IS_WIN95   ((BOOL)(!(IS_NT) && !(IS_WIN32S)) && IS_WIN32)

判断し排除する

 アプリケーションで、OSを判断し対象の環境外なら、メッセージを表示して終了する例を以下の示します。
INT  APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                      LPTSTR lpCmdLine,INT nCmdShow)
{
            : (他のコード)
    if (!(IS_WIN95 || IS_NT))
    {
        MessageBox(NULL,"このアプリケーションは、Windows 9x か"
                        " NT v3.51 以上でしか動作しません。"
                       ,"ApBooks",MB_ICONSTOP|MB_OK);
        return FALSE;
    }
            : (他のコード)
}
 WinMainの最初で、マクロ判断し、対象外(上記ではWIN32S)なら、MessageBox 関数でメッセージを表示して、終了します。WIN32を詳細に区別する必要のある時は、GetVersion で判断してください。

ページ移動