如何获得 WINDOWS 版本[C# 版]

类别:.NET开发 点击:0 评论:0 推荐:

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

本文地址:http://com.8s8s.com/it/it42323.htm