C#如何获得 WINDOWS 版本号

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
版本号

时间: 2024-10-07 01:18:58

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

推断Windows版本号新方法

曾经在代码中推断用户的Windows操作系统版本号都是通过GetVersion或GetVersionEx获取版本号号,然后比較. 今天偶然发如今新的Visual Studio提供了新的函数来推断系统版本号,比直接调用API要方便得多. 为了使用新的函数.须要使用SDK 8.1.我用的VS2013.已经自带了. #include "stdafx.h" #include <iostream> #include <windows.h> // VersionHelper

查看 Windows 版本号

一.使用 @@version 二.使用注册表 EXEC master.dbo.xp_regread  'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion','ProductName' 更多信息请参考 http://www.cnblogs.com/kerrycode/p/4988295.html

开源企业IM-免费企业即时通讯-ENTBOOST V0.9版本号公布

ENTBOOST V0.9版本号公布,更新内容:1.完好多人群组聊天,提高群组聊天性能及稳定性:2.苹果IOS SDK.添加联系人管理功能,优化API和内部流程.修复部分BUG.3.添加企业应用功能集成REST接口.服务端部分BUG修正:4.恩布企业IM Windows版本号添加内置集成PostgreSQL数据库.方便企业部署. CentOS版本号下载:点击下载 Windows版本号下载:点击下载 Windows内置集成PostgreSQL数据库版本号下载:点击下载 百度云盘下载地址:http:

为Windows 7的winsxs目录瘦身,谨慎。

刚使用Win7 系统不久,前段时间在清理系统垃圾时发现,win7系统的windows文件夹下的winsxs 文件夹占用空间很大,想清理之,却提示无权限无法清理.随即在网上查了个到底,原来winsxs是一个超大的文件仓库,系统所在分区差点儿全部的系统文件都在那里至少有一个备份.并且随着系统的使用,winsxs的所占的空间还将不断的积累壮大,终于将吞噬整个系统分区的磁盘空间.以下附上搜索来的一篇winsxs的具体描写叙述文摘.winsxs的瘦身方法和一篇关于 DLL Hell问题 的描写叙述文摘和大

Windows命令行的使用

在介绍Windows批处命令前,我们首先来介绍Windows命令行的使用. Windows shell提供了一个黑色的框框界面,即命令行操作界面,关于命令行的作用和好处,我就不费口舌了,下面仅窥见一斑. 为了方便,免得进行盘符切换,我在F盘建立了一个文件夹,名称为myFile, 把Windows的cmd.exe复制到myFile文件夹中,双击cmd.exe, 就可以进行命令行的操作了,双击后的结果为: Microsoft Windows XP [版本 5.1.2600](C) 版权所有 1985

【PHP分享】Windows tail工具分享

作者:zhanhailiang 日期:2014-09-28 在Linux下能够使用tail -f工具实时查看输出的日志.近期切换到本地Windows开发环境,顿时有点不爽.百度了下,最终找到tail的Windows的实现版本号. 1. 下载tail,解压后将tail.exe拷贝到Path路径下,以笔者为例,C:\Windows\System32: 2. 測试例如以下: Microsoft Windows [版本号 6.1.7601] 版权全部 (c) 2009 Microsoft Corpora

Windows RC版、RTM版、OEM版、RTL版、VOL版的区别

原文:http://www.metsky.com/archives/67.html 大家在安装WINDOWS操作系统(WINDOWS XP.WINDOWS VISTA.WINDOWS 7)时候,经常会遇到操作系统名称后面有个尾缀,诸如Windows RC版.CTP版.RTM版.OEM版.零售版.VOL版等等,这些版本具体都是什么意思呢,天缘博客就来列表比较一下. Windows 版本号标识区别一览表: Alpha版      内部测试版,一般不会向外部发布,会有很多Bug,只供测试人员使用,如果

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

ENTBOOST,VERSION 2014.180 Linux版本号公布,主要添加企业IM应用集成功能,完好安卓SDK功能及部分BUG修正: 7/1(明天)公布Windows版本号,敬请关注! ENTBOOST是跨平台.跨应用的实时通讯平台:恩布网络致力于帮助开发人员.软件公司和企业,组建企业级的即时通讯平台和运营平台:提供跨终端.跨应用的实时消息互通开源解决方式: 恩布公司站点:http://www.entboost.com 开源项目地址:http://www.oschina.net/p/en

unity4.x for mac破解(含Unity全版本号破解)

声明,破解方式及工具,均来源于国外互联网.仅供交流学习使用! 国外一个大仙做的破解.这位大侠实在是牛,全版本号跟进,win和mac的破解包都有.win下有类似于注冊机的Patch,mac下有crack.win和mac下,本人都经过了測试,所有通过.比較费劲的是,须要注冊才干下载,并且须要翻墙.我也是花费了一下午,才下载并測试出来. 以下以Unity4.2.0f4 为例. 全部版本号破解文件资源: http://game.ceeger.com/forum/read.php?tid=11478 Ma