最新のソフトウェア開発では、Windows 7 以降を含む、さまざまなプラットフォームおよびバージョンにわたって Windows 10 バージョンを検出します。 、クロスプラットフォームの互換性とバージョン固有の機能にアクセスするために重要です。ただし、Windows 10 より前の Windows バージョンを対象とする場合、IsWindows10OrGreater() などの Windows 固有の関数に依存すると課題が生じます。
マルチバージョンの代替手段
これらの制限を克服するには、堅牢なマルチバージョン ソリューションが必要です。 RtlGetVersion は、不正確な情報を返す可能性がある互換性シムをバイパスして、本物の OS バージョンを取得するための信頼できる方法を提供します。この関数には、次に示すように、DDK またはランタイム動的リンクを通じてアクセスできます。
<code class="C++">RTL_OSVERSIONINFOW GetRealOSVersion() { HMODULE hMod = ::GetModuleHandleW(L"ntdll.dll"); if (hMod) { RtlGetVersionPtr fxPtr = (RtlGetVersionPtr)::GetProcAddress(hMod, "RtlGetVersion"); if (fxPtr != nullptr) { RTL_OSVERSIONINFOW rovi = { 0 }; rovi.dwOSVersionInfoSize = sizeof(rovi); if ( STATUS_SUCCESS == fxPtr(&rovi) ) { return rovi; } } } RTL_OSVERSIONINFOW rovi = { 0 }; return rovi; }</code>
追加の考慮事項
詳細を強化するには、RTL_OSVERSIONINFOEXW 構造体を利用できます。 RTL_OSVERSIONINFOW の代わりに、 dwOSVersionInfoSize メンバー。このアプローチでは、マニフェストの有無に関係なく、Windows 10 に対して正確な結果が得られます。
機能ベースのアプローチ
Windows バージョンの検出を超えて、機能ベースの多くの場合、このアプローチは優れた代替手段とみなされます。 OS のバージョンではなく特定の機能をターゲットにすることで、アプリケーションは幅広いシステム構成に対応し、さまざまな環境にわたって最適なパフォーマンスを確保できます。
以上が異なるプラットフォームやバージョン間で Windows 10 のバージョンを確実に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。