2018/09/29 IsWindowsXPOrGreater() の存在意義
2018/09/21 My Pasokon Memo Ver. up to 2.00
今回は思いっきりプログラマーさん用のネタです。
これからは、Visual Studio 2017 を使ってみての感想もここに掲示するかもしれません。
GetVersionEx() 関数は今後使わずに IsWindows???OrGreater() を使えいうお達しが出ています。確かに以下のソースを Visual Studio 2017 でコンパイルすると以下のエラーが出ます。
//
// OS情報を得る
char os[50];
//*
OSVERSIONINFOEX ose;
ZeroMemory(&ose, sizeof(OSVERSIONINFOEX));
ose.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
APICall(GetVersionEx((LPOSVERSIONINFO)&ose), "GetVersionEx");//非推奨
//
lstrcpy(os, "unknown");
if ( ose.dwMajorVersion >= 10 ){
lstrcpy(os, "Windows 10");}
else if ( ose.dwMajorVersion >= 6 ){
if ( ose.dwMinorVersion >= 3 )
lstrcpy(os, "Windows 8.1");
else if ( ose.dwMinorVersion >= 2 )
lstrcpy(os, "Windows 8");
else if ( ose.dwMinorVersion >= 1 )
lstrcpy(os, "Windows 7");
else
lstrcpy(os, "Windows Vista");}
else if ( ose.dwMajorVersion == 5 ){
if ( ose.dwMinorVersion >= 1 )
lstrcpy(os, "Windows XP");}
//*/
lstrcpy(os, "unknown");
if ( IsWindows10OrGreater() )
lstrcpy(os, "Windows 10");
else if ( IsWindows8Point1OrGreater() )
lstrcpy(os, "Windows 8.1");
else if ( IsWindows8OrGreater() )
lstrcpy(os, "Windows 8");
else if ( IsWindows7OrGreater() )
lstrcpy(os, "Windows 7");
else if ( IsWindowsVistaOrGreater() )
lstrcpy(os, "Windows Vista");
else if ( IsWindowsXPOrGreater() )
lstrcpy(os, "Windows XP");
//
Debug(os);
|
1>------ ビルド開始: プロジェクト: ToolTest, 構成: Release Win32 ------ 1>Main.cpp 1>c:\my works\tooltest\main.cpp(116): error C4996: 'GetVersionExA': が非推奨として宣言されました。 1>c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\sysinfoapi.h(378): note: 'GetVersionExA' の宣言を確認してください 1>プロジェクト "ToolTest.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== |
それはこのプロジェクトの設定が以下のようになっているからです。
SDK は 10.0.17134.0 になっています。

これで生成された *.exe はWindows XP では動作しません。事実動作させると以下のエラーメッセージが出ます。

そこで設定を変更します。プラットホームツールセットを以下のようにします。

すると Windows XP でも動作します。これが前回言っていた Windows XP でも動かす工夫なのですが...。SDK は 7.0 になっています。
ところが再コンパイルをしてみると IsWindows???OrGreater() を使うための versionhelpers.h がないよとエラーが出てしまいます。
1>------ ビルド開始: プロジェクト: ToolTest, 構成: Release Win32 ------ (中略) 1>c:\my works\tooltest\mmain.cpp(5): fatal error C1083: include ファイルを開けません。'VersionHelpers.h':No such file or directory 1>プロジェクト "ToolTest.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== |
はてとここで思った!。じゃあ、IsWindowsXPOrGreater() ってどういうときに使えるのだろうか???
今日付けで My Pasokon Memo をバージョンアップしました。バージョンアップ内容は以下の通りです。
Ver.2.00 2018/09/21
さて1番目の更新ですが、作者はずっとVisual Studio 6.0 で開発してきましたがもう限界です。当ソフトの性格上様々な環境で動くようにする必要があり、コンパイラーをバージョンアップするとそれができなくなることはわかっていました。しかし以下のホームページにより古いOSはもう考えなくていいと考えました。
8月OSシェア | マイナビニュース
さてコンパイラーのバージョンを思いっきり上げると Visual Studio 2017 になり Windows XP 未満はサポートできなくなります。とは言っても Windows XP で動かすには多少工夫が必要ですが...。上記記事では Windows XP は3.30% とぎりぎり残っています。また当ソフトを Windows 2000 で動かすと以下のエラーメッセージが出て動作しません。

Windows 2000 の場合 Internet Explorer 6.0 が限界です。以下は IE6 の詳細設定ですが、TLSが1.0までしかサポートされていません。

これではヤフーのホームページも見ることができません。
Yahoo!セキュリティセンター | セキュリティ強化のお知らせ
よって Windows 2000 以下は切り捨てることにしました。2番目の修正がそれです。
3番目の修正は Windows 8 以降を正式に対応したということです。
4番目の修正は文字通りです。
今後他のソフトの対応OSは、Windows 2000 以下は切り捨てると思ってください。また Windows 8 はサポートしない可能性が高いです。Windows 8.1 は上記OSのシャアからするとやはりサポートしないかもしれません。Windows Vista は嫌いなのでサポートしないかもしれません。Windows XP は正式対応しないかもしれません。考え中です。