使用C#获取Windows版本(源码)

来源:互联网 发布:淘宝卖假货 编辑:程序博客网 时间:2024/04/30 19:06

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