mfc 获取操作系统版本,Server Pack版本,系统类型

VS2010官方正版安装教程:Win11兼容MFC开发环境搭建 Visual Studio 2010 是支撑大量工业控制、嵌入式设备及老旧ERP系统的关键开发工具,其核心价值在于与Windows XP/Server 2003等 legacy 系统的CRT运行时(msvcr100.dll)ABI级兼容。该兼容性源于VS2010 SP1绑定的VC++ 10.0工具链与Windows SDK 7.0A的深度耦合,构成不可替代的构建闭环。在现代操作系统如Win11上复现该环境,需突破Windows Installer升级校验、.NET Framework 4.0强名称绑定、MF 阅读详情
void CGetSysInfo::GetOSVersion(CString &strOSVersion, CString &strServerVersion)
{
	CString str;
	OSVERSIONINFOEX osvi;
	SYSTEM_INFO si;
	BOOL bOSVersionInfoEx;

	ZeroMemory(&si, sizeof(SYSTEM_INFO));
	ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));

	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
	if(!(bOSVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi)) )
	{
		osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
		GetVersionEx((OSVERSIONINFO *) &osvi);
	}

	GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");

	GetSystemInfo(&si);
	switch(osvi.dwPlatformId)
	{
	case VER_PLATFORM_WIN32_NT:
		if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0)
		{
			if(osvi.wProductType == VER_NT_WORKSTATION)
			{
				str.Format(_T("Windows Vista"));
			}
			else
			{
				str.Format(_T("Windows Server \"Longhorn\" "));
			}
		}
		if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
		{
			if(GetSystemMetrics(SM_SERVERR2))
			{
				str.Format(_T("Microsoft Windows Server 2003 \"R2\" "));
			}
			else if(osvi.wProductType == VER_NT_WORKSTATION &&
				si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
			{
				str.Format(_T("Microsoft Windows XP Professional x64 Edition "));
			}
			else
			{
				str.Format(_T("Microsoft Windows Server 2003, "));
			}
		}

		if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
		{
			str.Format(_T("Microsoft Windows XP "));
		}

		if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
		{
			str.Format(_T("Microsoft Windows 2000 "));
		}

		if(osvi.dwMajorVersion <= 4)
		{
			str.Format(_T("Microsoft Windows NT "));
		}

		if(bOSVersionInfoEx)
		{
			//将Server Pack版本保存
			strServerVersion.Format(_T("Service Pack %d"), osvi.wServicePackMajor);

			//Test for the workstation type.
			if(osvi.wProductType == VER_NT_WORKSTATION &&
				si.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_AMD64)
			{
				if(osvi.dwMajorVersion == 4)
					str = str + _T("Workstation 4.0");
				else if(osvi.wSuiteMask & VER_SUITE_PERSONAL)
					str = str + _T("Home Edition");
				else
					str = str + _T("Professional");
			}
			else if(osvi.wProductType == VER_NT_SERVER ||
				osvi.wProductType == VER_NT_DOMAIN_CONTROLLER)//Test for the server type.
			{
				if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
				{
					if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
					{
						if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
							str = str + _T("Datacenter Edition for Itanium-based Systems");
						else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
							str = str + _T("Enterprise Edition for Itanium-based Systems");
					}
					else if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
					{
						if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
							str = str + _T("Datacenter x64 Edition ");
						else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
							str = str + _T("Enterprise x64 Edition ");
						else
							str = str + _T("Standard x64 Edition ");
					}
					else
					{
						if( osvi.wSuiteMask & VER_SUITE_DATACENTER )  
							str = str + _T( "Datacenter Edition ");  
						else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )  
							str = str + _T( "Enterprise Edition ");  
						else if ( osvi.wSuiteMask & VER_SUITE_BLADE )  
							str = str + _T( "Web Edition ");  
						else str = str + _T( "Standard Edition ");
					}
				}
				else if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0)
				{
					if( osvi.wSuiteMask & VER_SUITE_DATACENTER )  
						str = str + _T("Datacenter Server ");  
					else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )  
						str = str + _T( "Advanced Server ");  
					else str = str + _T( "Server ");  
				}
				else
				{
					if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )  
						str = str + _T ("Server 4.0, Enterprise Edition ");  
					else str = str + _T ( "Server 4.0 " ); 
				}
			}
		}
		else // Test for specific product on Windows NT 4.0 SP5 and earlier
		{
			HKEY hKey;  
			TCHAR szProductType[256];  
			DWORD dwBufLen=256*sizeof(TCHAR);  
			LONG lRet;  

			lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,  
				_T("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"), 0, KEY_QUERY_VALUE, &hKey );  
			if( lRet != ERROR_SUCCESS )  
				strOSVersion = str;  
			return;  

			lRet = RegQueryValueEx( hKey, TEXT("ProductType"),  
				NULL, NULL, (LPBYTE) szProductType, &dwBufLen);  
			RegCloseKey( hKey );  

			if( (lRet != ERROR_SUCCESS) ||  
				(dwBufLen > 256*sizeof(TCHAR)) )  
				strOSVersion = str;  
			return;  

			if ( lstrcmpi( TEXT("WINNT"), szProductType) == 0 )  
				str = str + _T( "Workstation ");  
			if ( lstrcmpi( TEXT("LANMANNT"), szProductType) == 0 )  
				str = str + _T( "Server " );  
			if ( lstrcmpi( TEXT("SERVERNT"), szProductType) == 0 )  
				str = str + _T( "Advanced Server ");  
			str.Format(_T( "%d.%d "), osvi.dwMajorVersion, osvi.dwMinorVersion );
		}

		// Display service pack (if any) and build number.  
		if( osvi.dwMajorVersion == 4 &&   
			lstrcmpi( osvi.szCSDVersion, TEXT("Service Pack 6") ) == 0 )  
		{   
			HKEY hKey;  
			LONG lRet;  

			// Test for SP6 versus SP6a.  
			lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,  
				_T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009"), 0, KEY_QUERY_VALUE, &hKey );  
			if( lRet == ERROR_SUCCESS )  
				str.Format(_T( "Service Pack 6a (Build %d)\n"),   
				osvi.dwBuildNumber & 0xFFFF );           
			else // Windows NT 4.0 prior to SP6a  
			{  
				_tprintf( TEXT("%s (Build %d)\n"),  
					osvi.szCSDVersion,  
					osvi.dwBuildNumber & 0xFFFF);  
			}  

			RegCloseKey( hKey );  
		}  
		else // not Windows NT 4.0   
		{  
			_tprintf( TEXT("%s (Build %d)\n"),  
				osvi.szCSDVersion,  
				osvi.dwBuildNumber & 0xFFFF);  
		}  

		break;
	case VER_PLATFORM_WIN32_WINDOWS:
		if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)  
		{  
			str.Format(_T("Microsoft Windows 95 "));  
			if (osvi.szCSDVersion[1]=='C' || osvi.szCSDVersion[1]=='B')  
				str = str + _T("OSR2 ");  
		}   

		if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)  
		{  
			str.Format(_T("Microsoft Windows 98 "));  
			if ( osvi.szCSDVersion[1]=='A' || osvi.szCSDVersion[1]=='B')  
				str = str + _T("SE ");  
		}   
		if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)  
		{  
			str.Format(_T("Microsoft Windows Millennium Edition\n"));  
		}   
		break;  

	case VER_PLATFORM_WIN32s:  
		str.Format(_T("Microsoft Win32s\n"));  
		break;  
	default:  
		break;
	}
	strOSVersion = str;
}

基于VC++与MFC的远程控制软件核心架构与实现详解 客户端/服务器(C/S)架构是网络应用程序的经典模型,其核心原理在于定义明确的角色分工与通信协议,以实现可靠的数据交换与任务协同。在Windows平台开发中,这种架构的技术价值尤为突出,它要求开发者深入理解系统底层API、高效网络通信以及资源管理。通过Socket编程实现稳定连接,并运用多线程或异步I/O模型处理并发,是构建响应迅速、资源可控的应用基础。这些技术广泛应用于远程桌面、文件传输、系统管理等需要实时交互与远程操控的场景。本文聚焦于一个具体的远程控制软件实现,深入剖析了其采用**WSAAsyncSe 阅读详情

相关推荐

VC++实战KTV点歌系统:MFC+DirectShow+SQLite工业级桌面应用开发

桌面应用开发是软件工程中的重要领域,尤其在需要高性能、高稳定性和深度硬件交互的场景中。其核心原理在于直接调用操作系统原生API,避免中间层带来的性能损耗和不确定性,从而实现对系统资源的精细控制。这种技术价值在实时音视频处理、工业控制等对响应速度和可靠性要求极高的领域尤为突出。应用场景广泛,从多媒体播放器到嵌入式设备控制界面,都依赖于高效的桌面程序架构。本文聚焦于使用VC++与MFC框架,结合DirectShow多媒体框架和SQLite数据库,开发一个高稳定性的KTV点歌系统。该项目涉及UI交互、数据库操作、

dianzongfan5428的博客 461

MFC 获取系统类型及版本

CString CWizardSheet::GetSystemType(void) { OSVERSIONINFO osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); CString csver; switch (osvi.dwPlatformId

hxmcnu的专栏 2542

MFC编写代码,获取电脑主板型号、硬盘容量和操作系统版本信息

MFC编写代码,获取电脑主板型号、硬盘容量和操作系统版本信息

希望我的博客,能帮上你解决学习中工作中所遇到的问题 995

VC/MFC程序中获取当前Windows操作系统版本名称(2016-04-25修改)

CString getOSName() { CString osName = _T(""); int a=0,b=0,i=0,j=0; _asm { pushad mov ebx,fs:[0x18] ; get self pointer from TEB mov eax,fs:[0x30] ; get pointer to PEB / database

C语言是最好的编程语言 5129

vc获取windows系统信息mfc

vc获取windows系统信息mfcvc获取windows系统信息mfcvc获取windows系统信息mfcvc获取windows系统信息mfc

MFC 获取程序版本信息

C++ MFC 获取程序版本信息,包括程序的主版本号,程序内部版本号等。

简介Visual C++ 2008 Feature Pack

无数的Visual C++程序员为了那几个单调、简单Visual C++的控件苦恼着;而无数的Visual C++程序员又因为这个界面问题而大发其财。BCG Library、Magic Skin 这些专门为解决程序界面问题的库顺势而生。想必绝大多数用Visual C++写成的程序在商业化之前都会经过这些界面库的修饰。使用标准的MFC,想给菜单项加个图标都得通过自己派生一个类来做的情况下,你还指望自

5464

MFC版本信息获取

我在学习版本控制时,看到博客中很多讲的并不明白,而且MSDN上讲的太简单。 所以分享一个非常实用的版本控制源代码。清晰明了。

千呼万唤始出来的 Visual C++ 2008 Feature Pack 介绍

缘起: 自Visual C++ 5.0 6.0 以来一直遭人诟病的是什么? 过于简单的界面控件! 作为一个以Visual C++ 作为开发工具的程序员,遇到最郁闷的事情是什么? 开发一个具有漂亮界面的程序!! Visual C++ 不是真正意义上的RAD(Rapidly Application Development)工具的主要原因是什么? 还是因为没有丰富的界面控件!!! 无

momosp的专栏 1151

获得Windows XP 内部版本号,vc++ MFC程序

获得Windows XP 内部版本号,vc++ MFC程序,通用分析PE格式,自己实现的GetProcAddress ,写壳会用到的东西。

IMU卡尔曼滤波方法详细介绍

本文介绍了基于IMU和卡尔曼滤波的状态估计方法。系统采用9维状态向量(位置、速度、加速度计零偏),通过牛顿运动学建立状态方程,并利用外部位置观测进行校正。详细推导了状态转移矩阵和控制输入矩阵的形式,阐述了预测和更新的计算步骤。同时说明了过程噪声Q和观测噪声R的设置原则,其中Q反映模型不确定性,R取决于传感器精度。该方法可有效融合IMU测量与外部观测数据,实现位置、速度和偏置的联合估计。

haing2019的博客 757

VC++ 6.0遗产系统维护:完整环境搭建与MFC项目实战指南

在软件工程领域,集成开发环境(IDE)和编译器是构建应用程序的核心工具。其工作原理是将源代码转换为可执行文件,涉及编译、链接、库管理等关键环节。对于需要长期稳定运行的关键业务系统而言,技术选型的延续性和环境的一致性具有极高的工程价值。尤其在工业控制、金融、医疗等对可靠性要求严苛的场景中,系统往往需要持续运行数十年,与特定时期的开发工具深度绑定。因此,维护这些系统时,获取并正确配置其原始的、完整的开发环境成为一项刚需。本文聚焦于经典的VC++ 6.0开发环境,详细解析如何获取和部署包含MSDN、关键补丁及第三

weixin_30457551的博客 394

100:vue+cesium: 加载glb文件,随机位置加载2000架飞机

本示例在 Vue + cesium 项目中随机位置加载2000架飞机,飞机是glb文件,每个大小为571kb。这个示例属于性能优化的范畴内,通常如果用entity加载glb只能显示几个飞机,这里采用primitive的方法来加载。直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果.

大剑师兰特的GIS世界 707

Visual Studio 2008 Service Pack 1

Visual Studio 2008 Service Pack 1 和 .NET Framework 3.5 Service Pack 1 简介 Visual Studio 2008 和 .NET Framework 3.5 使开发人员能够快速创建高质量、用户体验丰富而又紧密联系的应用程序。任何规模的组织都可以使用 Visual Studio 2008 快速创建与 Windows Vista™...

weixin_34179968的博客 416

【LAMMPS学习】八、基础知识(4.5)TIP5P水模型

​ 五点 TIP5P 刚性水模型通过添加两个通常无质量的附加位点 L 来扩展three-point TIP3P model,其中放置与氧原子相关的电荷。这些位点 L 位于距氧原子固定距离处,形成从 HOH 平面旋转 90 度的四面角。因此,这些位点在某种程度上近似于氧的孤对,从而改善了水结构,与four-point TIP4P model相比变得更加“四面体”。

荷塘阅色 1421

MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态

执行手眼校准有助于操作配备末端执行器(简称 “手”)的机械臂,该末端执行器依赖于摄像头提供的视觉数据。一旦完成了眼在手外的校准,机械臂就能准确地移动到摄像头识别的特定像素位置。这种能力是执行精确拾放任务(如分类、堆垛和分拣)的基础,即使在摄像机的确切位置和方向未知的情况下也是如此。机器人-摄像机系统有两种构型:眼在手内和眼在手外。在眼在手内构型中,摄像头直接安装在机器人手臂的末端执行器上。相反,在眼在手的构型中,摄像头固定在一个静止的物体上,机器人手臂在其视野内。

机器人控制与仿真应用 3354

SQL Server 2012 安装配置全指南:从环境准备到避坑实战

数据库作为现代信息系统的核心,其安装与配置是数据存储、管理和应用的基础。SQL Server作为主流的关系型数据库管理系统,其安装过程涉及系统环境、组件选择与权限配置等多个技术环节。正确的安装不仅能确保数据库服务的稳定运行,更是后续性能优化与安全管理的前提,尤其在企业遗留系统维护、开发测试环境搭建等场景中至关重要。本文聚焦于SQL Server 2012这一经典版本,针对其**安装失败**的常见问题与**远程连接**的关键配置,提供了从介质获取、环境检查到服务验证的完整解决方案,帮助读者高效完成部署,为后续

weixin_33709364的博客 457

YOLOv11的代数不变量解释:Syzygy模分析特征重要性,用交换代数揭示卷积核的语义相关性

本文提出了一种基于代数几何与交换代数的创新方法,特别是运用Syzygy模理论,对YOLOv11目标检测算法的卷积核语义相关性进行数学解释。研究揭示了YOLO系列算法演进背后的代数结构特征,建立了网络组件与多项式环、理想簇等代数概念的对应关系。通过构建分层的准同构代数系统,分析了YOLOv11在不同尺度下保持语义不变性的数学本质。文章系统阐述了Syzygy模在CNN特征冗余分析、跨层依赖关系建模和语义聚类中的应用,并提出了适用于动态稀疏训练的改进算法。该理论框架为深度神经网络的解释性研究提供了新的数学工具,同

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1273

Windows网络编程实战:基于MFC与WinSock的C/S通信架构解析与源码调试

网络编程是构建分布式系统的核心技术,其核心在于实现不同主机间的进程通信。其基本原理基于TCP/IP协议栈,通过套接字(Socket)抽象层提供数据传输服务。在Windows平台,WinSock API是实现这一功能的基础,而MFC框架则通过CAsyncSocket等类对其进行了封装,简化了异步事件驱动模型的开发,提升了开发效率。这种技术的核心价值在于能够构建稳定、高效的客户端/服务器(C/S)应用,例如即时通讯、在线游戏和远程控制系统。在实际工程中,开发者常需处理粘包/拆包、并发模型和心跳机制等经典问题。本

congtaixiao7151的博客 440

倾斜摄影数据转换为3DTile格式的方法:基于CesiumLab GIS

通过使用CesiumLab GIS,倾斜摄影数据可以方便地转换为3DTile格式,并在CesiumJS等3D地理信息可视化工具中进行展示和分析。一旦成功导入3DTile数据,就可以在CesiumLab GIS中利用其强大的可视化和分析功能进行进一步的处理。转换完成后,可以将生成的3DTile数据导入到CesiumLab GIS中进行可视化和分析。启动CesiumLab GIS应用程序,并按照界面上的指导导入转换后的3DTile数据。脚本将开始执行,并将倾斜摄影数据转换为3DTile格式。

ObDjango的博客 1076

MCAL知识点(十):ERU驱动配置详解

ERS:外部请求单元ETL:中断逻辑单元OGU:输出逻辑单元MCU里面配置要使用的功能和选择输入的管脚,注意上述模块关注点讲述的ERU必须和边沿检测模块相关联。

梦想技术家 1223

MFC C++跨平台远程桌面实现:架构设计与工程实践

远程桌面控制技术基于客户端-服务器架构,通过网络协议传输屏幕图像与输入指令,实现跨系统操作。其核心原理在于高效的屏幕捕获、编码压缩与网络传输,技术价值在于打破平台壁垒,实现异构系统的统一管理。在工业控制、嵌入式运维等场景中,常需复用现有成熟客户端代码以降低成本。本文聚焦于在传统MFC框架中实现跨平台远程控制,通过协议抽象与平台相关后端分离,使MFC客户端能连接并控制Windows与Linux系统。文中深入探讨了使用X11进行屏幕捕获与输入模拟、以及利用libjpeg-turbo进行图像压缩等关键技术细节,为

weixin_34332905的博客 425

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Visual Studio 2008 Service Pack 1 (SP1)的ISO

Visual Studio 2008 SP1 delivers: Improved WPF designers SQL Server 2008 support ADO.NET Entity Designer Visual Basic and Visual C++ components and tools (including an MFC-based Office 2007 style ‘Rib

Mobidogs Blog 1804

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

基于Visual C++的类QQ聊天工具源码详解:从TCP协议到MFC UI的实战解析

网络编程是构建实时通信应用的基石,其核心在于理解TCP/IP协议栈的工作原理。TCP作为面向连接的可靠传输层协议,通过三次握手建立连接、滑动窗口机制保证数据有序可靠送达,并依靠心跳机制维持长连接活性。掌握这些原理对于开发高性能、低延迟的即时通讯(IM)系统至关重要。在工程实践中,开发者需在应用层设计自定义协议以解决TCP的粘包/拆包问题,并利用多线程技术分离网络I/O与用户界面(UI)渲染,确保程序响应流畅。以经典的Visual C++ MFC桌面聊天程序为例,其源码清晰展示了如何将Socket通信、线程同

weixin_30764883的博客 298

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: mfc获取计算机名和用户名
下一篇: mfc 判断是否为64位操作系统
RuningPigNO1
博客等级 码龄10年 22粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RuningPigNO1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值