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=8 )]
public String versionString;
}
[ StructLayout( LayoutKind.Sequential )]
public struct OSVersionInfo
{
public int OSVersionInfoSize;
public int MajorVersion;
public int MinorVersion;
public int BuildNumber;
public int PlatformId;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=8 )]
public String versionString;
}
public class LibWrap
{
[ DllImport( "kernel" )]
public static extern bool GetVersionEx( [In, Out] OSVersionInfo osvi );
[ DllImport( "kernel", EntryPoint="GetVersionEx" )]
public static extern bool GetVersionEx( ref OSVersionInfo 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 : {}\nPack: {}", osvi.OSVersionInfoSize, OpSysName(osvi.MajorVersion, osvi.MinorVersion,osvi.PlatformId),osvi.versionString);
Console.WriteLine("{0}", osvi.PlatformId);
Console.WriteLine( "\nPassing OSVersionInfo as struct" );
OSVersionInfo osvi = new OSVersionInfo();
osvi.OSVersionInfoSize = Marshal.SizeOf( osvi );
LibWrap.GetVersionEx( ref osvi );
Console.WriteLine( "Static size: {0} \nOperation System : {}\nPack: {}", osvi.OSVersionInfoSize, OpSysName(osvi.MajorVersion, osvi.MinorVersion,osvi.PlatformId),osvi.versionString);
}
public static String OpSysName(int MajorVersion,int MinorVersion ,int PlatformId)
{
String str_opn =String.Format("{0}.{}",MajorVersion,MinorVersion);
switch(str_opn)
{
case ".0":
return win9_nt0(PlatformId);
case ".0":
return "Windows 98";
case ".90":
return "Windows Me";
case ".":
return "Windows NT .";
case ".0":
return "Windwos 000";
case ".":
return "Windwos XP";
case ".":
return "Windows Server 00 family";
default:
return "This windows version is not distinguish!";
}
}
public static String win9_nt0(int PlatformId)
{
switch(PlatformId)
{
case :
return "Windows 9";
case :
return "Windows NT .0";
default:
return "This windows version is not distinguish!";
}
}
}
}








