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. 使用Visual Studio 创建新的Web Part项目

    使用Visual Studio 创建新的Web Part项目 Web Part是你将为SharePoint创建的最常见的对象之中的一个.它是平台构建的核心基块. 1. 管理员身份打开Visual St ...

  2. oracle 之 内存—鞭辟近里(四)

    oracle 之 内存—鞭辟近里(四) 今天是2013-07-11日,首先我非常感谢我的哥们也是我的网友杨工,非常感谢他能在大数据库内帮我执行一下我所需要的信息.就是他说的网络真是一个互助友爱的平台. ...

  3. [非官方]ArcGIS10.2 for Desktop扩展工具包——XTools Pro

    XTools Pro 是一套为ArcGIS平台设计的矢量空间分析. 形状转换和表管理扩展工具,大大增强了 ArcGIS 的功能,使用该工具能够提高 ArcGIS 用户的效率和性能. XTools Pr ...

  4. jQuery Mobile 是创建移动 web 应用程序的框架。

    jQuery Mobile jQuery Mobile 是创建移动 web 应用程序的框架. jQuery Mobile 适用于所有流行的智能手机和平板电脑. jQuery Mobile 使用 HTM ...

  5. hdu2606(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2606 题意:  用1*1,2*2,3*3,4*4的正方形填充4*n的矩形, 问有多少种不同填法. 分析 ...

  6. Java程序猿笔试面试之String1

    1.怎样实现字符串的反转比如:"how are you"--->"you are how" public class InverseString { pu ...

  7. DirectX Sample-ConfigSystem中采用配置文件进行游戏设置

    这个例子是一个撞球系统,碰撞部分也值得学习,不过最重要的还是其配置部分,配置文件为config.txt,其中包括: Requirements:所需配置 propertyset:预定义的设置,通过名字引 ...

  8. a标签的背景图在ie8下不显示的问题

    突然发现临下班时候问题就多, 马上下班了被头头告知线上已经上线很久的活动现在有个兼容性问题, a标签的背景图在ie8下会有不显示的情况. 我自己找了台ie8的机器实验了一下, 发现一切正常, 但是在另 ...

  9. windows接口被占用

    netsh winsock reset 重启winsock服务

  10. QT Programming 1

    1.控制台输出 helloworld #include<QtCore/QCoreApplication> #include<QDebug> int main(int argc, ...