Pengesanan Windows 10 Cross-Platform
Menentukan versi Windows 10 selalunya bermasalah kerana batasan fungsi terbina dalam seperti IsWindows10OrGreater( ). Isu ini menjadi lebih mendesak apabila keserasian merentas platform diingini.
Penyelesaian Universal
Untuk mengatasi halangan ini, dicadangkan untuk menggunakan fungsi RtlGetVersion. Fungsi ini memintas shims keserasian dan memberikan akses kepada versi OS sebenar. Walaupun ia tersedia dalam DDK, ia juga boleh digunakan melalui pemautan dinamik masa jalan menggunakan coretan kod berikut:
typedef LONG NTSTATUS, *PNTSTATUS; #define STATUS_SUCCESS (0x00000000) typedef NTSTATUS (WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW); 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; }
Coretan ini mengembalikan versi OS sebenar pada Windows 10, walaupun tanpa manifes.
Pendekatan Alternatif
Penyelesaian alternatif memfokuskan pada penggunaan ciri dan bukannya versi OS. Ini membolehkan pendekatan yang lebih fleksibel di mana pelaksanaan berbeza disediakan berdasarkan keupayaan yang ada.
Atas ialah kandungan terperinci Bagaimana untuk Mengesan Versi Windows 10 Merentasi Platform dengan Amanah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!