Je dois détecter le système d’exploitation Windows 8 dans mon application Windows C # et effectuer certains réglages. Je sais que nous pouvons détecter Windows 7 en utilisant Environment.OSVersion
, mais comment Windows 8 peut-il être détecté?
Merci d’avance.
Version win8version = new Version(6, 2, 9200, 0); if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version >= win8version) { // its win8 or higher. }
Ok, les gars, il me semble que ce morceau de code a été marqué comme déconseillé par Microsoft lui-même. Je laisse un lien ici pour en savoir plus.
En bref, il dit:
Pour Windows 8 et supérieur, il y aura toujours le même numéro de version de (6, 2, 9200, 0) . Et plutôt que de rechercher la version de Windows, recherchez la fonctionnalité réelle que vous essayez de résoudre.
Windows 8 ou plus récent:
bool IsWindows8OrNewer() { var os = Environment.OSVersion; return os.Platform == PlatformID.Win32NT && (os.Version.Major > 6 || (os.Version.Major == 6 && os.Version.Minor >= 2)); }
Vérifiez la réponse à la question suivante: Comment obtenir le nom de version du système d’exploitation “convivial”?
Citation réponse:
Vous pouvez utiliser WMI pour obtenir le nom du produit (“Microsoft® Windows Server® 2008 Enterprise”):
using System.Management; var name = (from x in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType() select x.GetPropertyValue("Caption")).First(); return name != null ? name.ToSsortingng() : "Unknown";
Commencez par déclarer une structure comme suit:
[StructLayout(LayoutKind.Sequential)] public struct OsVersionInfoEx { public int dwOSVersionInfoSize; public uint dwMajorVersion; public uint dwMinorVersion; public uint dwBuildNumber; public uint dwPlatformId; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public ssortingng szCSDVersion; public UInt16 wServicePackMajor; public UInt16 wServicePackMinor; public UInt16 wSuiteMask; public byte wProductType; public byte wReserved; }
Vous aurez besoin de cette instruction:
using System.Runtime.InteropServices;
En haut de votre classe, déclarez:
[DllImport("kernel32", EntryPoint = "GetVersionEx")] static extern bool GetVersionEx(ref OsVersionInfoEx osVersionInfoEx);
Appelez maintenant le code comme suit:
const int VER_NT_WORKSTATION = 1; var osInfoEx = new OsVersionInfoEx(); osInfoEx.dwOSVersionInfoSize = Marshal.SizeOf(osInfoEx); try { if (!GetVersionEx(ref osInfoEx)) { throw(new Exception("Could not determine OS Version")); } if (osInfoEx.dwMajorVersion == 6 && osInfoEx.dwMinorVersion == 2 && osInfoEx.wProductType == VER_NT_WORKSTATION) MessageBox.Show("You've Got windows 8"); } catch (Exception) { throw; }
Je ne sais pas si c’est correct car je ne peux que vérifier la version de Windows 8 que j’ai.
int major = Environment.OSVersion.Version.Major; int minor = Environment.OSVersion.Version.Minor; if ((major >= 6) && (minor >= 2)) { //do work here }