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( " Passing OSVersionInfo as class" );

OSVersionInfo osvi = new OSVersionInfo();

osvi.OSVersionInfoSize = Marshal.SizeOf( osvi );

LibWrap.GetVersionEx( osvi );



Console.WriteLine( "Class size: {0} Operation System : {1} Pack: {2}", osvi.OSVersionInfoSize, OpSysName(osvi.MajorVersion, osvi.MinorVersion,osvi.PlatformId),osvi.versionString);

Console.WriteLine("{0}", osvi.PlatformId);



Console.WriteLine( " Passing OSVersionInfo as struct" );

OSVersionInfo2 osvi2 = new OSVersionInfo2();

osvi2.OSVersionInfoSize = Marshal.SizeOf( osvi2 );

LibWrap.GetVersionEx2( ref osvi2 );

Console.WriteLine( "Static size: {0} Operation System : {1} Pack: {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://www.2cto.com/kf/200906/39061.html

使用GetVersionEx传递例如以下结构来获得此信息

typedef struct _OSVERSIONINFOEX { 

 DWORD dwOSVersionInfoSize;  

DWORD dwMajorVersion; 

 DWORD dwMinorVersion; 

 DWORD dwBuildNumber; 

 DWORD dwPlatformId;  

TCHAR szCSDVersion[128];  

WORD wServicePackMajor; 

 WORD wServicePackMinor;  

WORD wSuiteMask;  //此成员能够用来作为推断home 还是professional的根据

BYTE wProductType; 

 BYTE wReserved;

} OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;



关于操作系统的其它的信息你都能够在此结构中找到,详细使用參见MSDN的帮助

不怎么用C#,现学现卖给你写了一段代码,(代码中有不合理的地方,自己參照改动,实在没用过C#)例如以下:



主要代码例如以下:

using System.Runtime.InteropServices;



上述结构在C#中定义例如以下:

[ 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;

public Int16  wServicePackMajor;  

public Int16  wServicePackMinor;  

public Int16  wSuiteMask;  

public Byte  wProductType;  

public Byte  wReserved;

}





public class GetSysApi

{

   [ DllImport( "Kernel32.dll" )]

   public static extern bool GetVersionEx( [In, Out] OSVersionInfo osvi );

}



private void button2_Click(object sender, System.EventArgs e)

{

   OSVersionInfo osvi = new OSVersionInfo();

   osvi.OSVersionInfoSize = Marshal.SizeOf( osvi );

  GetSysApi.GetVersionEx(osvi);

  string tm = osvi.buildNumber+osvi.majorVersion+osvi.minorVersion+

      osvi.platformId +osvi.versionString+osvi.wProductType+

      osvi.wReserved+osvi.wSuiteMask;

   MessageBox.Show(tm);//依据那些成员变量,有足够的信息够你对操作系统进行推断

  //我这里仅仅写了你需求的关于windows xp professional或者windows xp home的推断

  if ( osvi.wProductType == 1)

  {

    if( osvi.majorVersion == 4 )

     MessageBox.Show( "Workstation 4.0 ");

    else if(( osvi.wSuiteMask & 512 )!=0) 

      MessageBox.Show("Win Xp Home Edition " );

    else MessageBox.Show("Win Xp Professional " );

   }



}



来自:http://bbs.csdn.net/topics/90504765

C#如何获得 WINDOWS 版本号的更多相关文章

  1. 超具体Windows版本号编译执行React Native官方实例UIExplorer项目(多图慎入)

    ),React Native技术交流4群(458982758).请不要反复加群! 欢迎各位大牛,React Native技术爱好者加入交流!同一时候博客右側欢迎微信扫描关注订阅号,移动技术干货,精彩文 ...

  2. 开源企业IM-免费企业即时通讯-ENTBOOST V2014.183 Windows版本号正式宣布

    ENTBOOST,VERSION 2014.183 Windows(点击下载)版本号公布.主要添加PC端P2P(点对点)文件传输功能:公布安卓Android手机clientAPP 1.0版本号.公布苹 ...

  3. 推断Windows版本号新方法

    曾经在代码中推断用户的Windows操作系统版本号都是通过GetVersion或GetVersionEx获取版本号号,然后比較. 今天偶然发如今新的Visual Studio提供了新的函数来推断系统版 ...

  4. 获取windows版本号

    原文:https://blog.csdn.net/justFWD/article/details/44856277 内容整理如下,点击跳至指定内容: manifest文件加上compatibility ...

  5. 查看Windows版本号

    1.Win+R,在运行中输入:msinfo32 2.在cmd中输入:ver 3.注册表(regedit)中:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows ...

  6. 开源企业IM-免费企业即时通讯-ENTBOOST V2014.180 Windows版本号正式公布

    ENTBOOST,VERSION 2014.180 Linux版本号公布,主要添加企业IM应用集成功能,完好安卓SDK功能及部分BUG修正. 下一版本号公布时间.7月15日.敬请关注. ENTBOOS ...

  7. 开源企业IM-免费企业即时通讯-ENTBOOST V2014.177 Windows版本号正式公布

    ENTBOOST,VERSION 2014.177 LINUX 版本号公布.主要添加Android安卓手机开发接口.企业IM接口,JQUERY开发接口,PCclient部分BUG修正: 下版本号更新时 ...

  8. 显示Windows版本号

    实现效果: 知识运用: PaintDesktopVersion键 实现代码: private void button1_Click(object sender, EventArgs e) { Regi ...

  9. 开源企业IM,免费企业即时通讯软件-ENTBOOST云通讯平台Windows(r174)版本号公布

    经过恩布团队全体成员的不懈努力,依照原定计划,最终在今天(5月14日)公布第二个开源版本号,恩布企业互联IM,ENTBOOST 0.2.0(r174beta)Windows版本号:主要功能支持文本.表 ...

随机推荐

  1. hibernate 在tomcat7.X 下配置mysql数据源

    先说一点题外话,LZ近期学习java web. 今天刚看到hibernate,发如今hibernate配置数据源时网上的资料都太久远了,一般以tomcat 5 版本号下的配置居多.而tomcat 7下 ...

  2. IE, FireFox, Opera 浏览器支持CSS实现Alpha透明的方法 兼容问题

    一:要解决的问题时:在ie6-ie11下兼容下面透明上传文件button的效果. 实现方式通过滤镜实现. 二:效果图例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3N ...

  3. 每日一小练——高速Fibonacci数算法

    上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...

  4. BZOJ 1324 Exca 神剑 最小割

    标题效果:鉴于加权值矩阵,带走一个地方的权利值之后,与其相邻的格儿童权利值变0.问多少可以取出到右值. 思维:Amber论文题目.不难建设,图着色.颜色从S连边,还有一种颜色向T连边.再把相邻的格子连 ...

  5. Error : APP-FND-01926: The custom event WHEN-LOGON-CHANGED raised unhandled exception: ORA-06502: PL

    In this Document   _afrLoop=440418974213449&id=1508865.1&_afrWindowMode=0&_adf.ctrl-stat ...

  6. [Linux]Centos git报错fatal: HTTP request failed

    在使用git pull.git push.git clone会报类似例如以下的错误: error: The requested URL returned error: 401 Unauthorized ...

  7. 从mina中学习超时程序编写

    从mina中学习超时程序编写 在很多情况下,程序需要使用计时器定,在指定的时间内检查连接过期.例如,要实现一个mqtt服务,为了保证QOS,在服务端发送消息后,需要等待客户端的ack,确保客户端接收到 ...

  8. Yii学习笔记之三(在windows 上安装 advanced )

    首先说一下下载地址: http://www.yiiframework.com/download/ 然后将下载下来的文件进行解压到 你指定的文件夹 解压过程中假设报什么错误 直接忽略掉 我的解压文件夹是 ...

  9. ORACLE 实验二

    实验二:数据操纵 实验学时:4学时 实验类型:综合型 实验要求:必修 一.实验目的 1.掌握SQL数据查询语句: 2.掌握SQL聚集函数的使用. 3.掌握SQL插入.改动.删除语句的使用. 二.实验内 ...

  10. HDU 5066 Harry And Physical Teacher(物理题)

    HDU 5066 Harry And Physical Teacher 思路:利用物理里面的动量守恒公式.因为保证小车质量远大于小球.所以能够把小车质量当成无穷大带进去,得到答案为2 * v0 - v ...