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!"; } } } } 
|