using System; 
 using System.Runtime.InteropServices; namespace GetWindowsVersion 
 { 
 [ StructLayout( LayoutKind.Sequential )] 
 public class OSVersionInfo 
 { 
 public int OSVersionInfoSize; 
 public int MajorVersion; 
 public int MinorVersion; 
 public int BuildNumber; 
 public int PlatformId; [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )] 
 public String versionString; 
 } [ StructLayout( LayoutKind.Sequential )] 
 public struct OSVersionInfo2 
 { 
 public int OSVersionInfoSize; 
 public int MajorVersion; 
 public int MinorVersion; 
 public int BuildNumber; 
 public int PlatformId; [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )] 
 public String versionString; 
 } public class LibWrap 
 { 
 [ DllImport( "kernel32" )] 
 public static extern bool GetVersionEx( [In, Out] OSVersionInfo osvi ); [ DllImport( "kernel32", EntryPoint="GetVersionEx" )] 
 public static extern bool GetVersionEx2( ref OSVersionInfo2 osvi ); 
 }  public class App 
 { 
 public static void Main() 
 { 
 Console.WriteLine( "\nPassing OSVersionInfo as class" ); OSVersionInfo osvi = new OSVersionInfo(); 
 osvi.OSVersionInfoSize = Marshal.SizeOf( osvi ); LibWrap.GetVersionEx( osvi ); 
Console.WriteLine( "Class size: {0} \nOperation System : {1}\nPack: {2}", osvi.OSVersionInfoSize, OpSysName(osvi.MajorVersion, osvi.MinorVersion,osvi.PlatformId),osvi.versionString); 
 Console.WriteLine("{0}", osvi.PlatformId); Console.WriteLine( "\nPassing OSVersionInfo as struct" ); 
OSVersionInfo2 osvi2 = new OSVersionInfo2(); 
 osvi2.OSVersionInfoSize = Marshal.SizeOf( osvi2 ); LibWrap.GetVersionEx2( ref osvi2 ); 
 Console.WriteLine( "Static size: {0} \nOperation System : {1}\nPack: {2}", osvi2.OSVersionInfoSize, OpSysName(osvi2.MajorVersion, osvi2.MinorVersion,osvi2.PlatformId),osvi2.versionString); } 
 public static String OpSysName(int MajorVersion,int MinorVersion ,int PlatformId) 
 { 
 String str_opn =String.Format("{0}.{1}",MajorVersion,MinorVersion); switch(str_opn) 
 { 
 case "4.0": 
 return win95_nt40(PlatformId); 
 case "4.10": 
 return "Windows 98"; 
 case "4.90": 
 return "Windows Me"; 
 case "3.51": 
 return "Windows NT 3.51"; 
 case "5.0": 
 return "Windwos 2000"; 
 case "5.1": 
 return "Windwos XP"; 
 case "5.2": 
 return "Windows Server 2003 family"; 
 default: 
 return "This windows version is not distinguish!"; 
 } 
 } 
 public static String win95_nt40(int PlatformId) 
 { 
 switch(PlatformId) 
 { 
 case 1: 
 return "Windows 95"; 
 case 2: 
 return "Windows NT 4.0"; 
 default: 
 return "This windows version is not distinguish!"; 
 } 
 } 
 } 
 }