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++实战KTV点歌系统:MFC+DirectShow+SQLite工业级桌面应用开发
桌面应用开发是软件工程中的重要领域,尤其在需要高性能、高稳定性和深度硬件交互的场景中。其核心原理在于直接调用操作系统原生API,避免中间层带来的性能损耗和不确定性,从而实现对系统资源的精细控制。这种技术价值在实时音视频处理、工业控制等对响应速度和可靠性要求极高的领域尤为突出。应用场景广泛,从多媒体播放器到嵌入式设备控制界面,都依赖于高效的桌面程序架构。本文聚焦于使用VC++与MFC框架,结合DirectShow多媒体框架和SQLite数据库,开发一个高稳定性的KTV点歌系统。该项目涉及UI交互、数据库操作、
MFC 获取系统类型及版本
CString CWizardSheet::GetSystemType(void) { OSVERSIONINFO osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); CString csver; switch (osvi.dwPlatformId
MFC编写代码,获取电脑主板型号、硬盘容量和操作系统版本信息
MFC编写代码,获取电脑主板型号、硬盘容量和操作系统版本信息
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
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,想给菜单项加个图标都得通过自己派生一个类来做的情况下,你还指望自
MFC版本信息获取
我在学习版本控制时,看到博客中很多讲的并不明白,而且MSDN上讲的太简单。 所以分享一个非常实用的版本控制源代码。清晰明了。
千呼万唤始出来的 Visual C++ 2008 Feature Pack 介绍
缘起: 自Visual C++ 5.0 6.0 以来一直遭人诟病的是什么? 过于简单的界面控件! 作为一个以Visual C++ 作为开发工具的程序员,遇到最郁闷的事情是什么? 开发一个具有漂亮界面的程序!! Visual C++ 不是真正意义上的RAD(Rapidly Application Development)工具的主要原因是什么? 还是因为没有丰富的界面控件!!! 无
获得Windows XP 内部版本号,vc++ MFC程序
获得Windows XP 内部版本号,vc++ MFC程序,通用分析PE格式,自己实现的GetProcAddress ,写壳会用到的东西。
IMU卡尔曼滤波方法详细介绍
本文介绍了基于IMU和卡尔曼滤波的状态估计方法。系统采用9维状态向量(位置、速度、加速度计零偏),通过牛顿运动学建立状态方程,并利用外部位置观测进行校正。详细推导了状态转移矩阵和控制输入矩阵的形式,阐述了预测和更新的计算步骤。同时说明了过程噪声Q和观测噪声R的设置原则,其中Q反映模型不确定性,R取决于传感器精度。该方法可有效融合IMU测量与外部观测数据,实现位置、速度和偏置的联合估计。
VC++ 6.0遗产系统维护:完整环境搭建与MFC项目实战指南
在软件工程领域,集成开发环境(IDE)和编译器是构建应用程序的核心工具。其工作原理是将源代码转换为可执行文件,涉及编译、链接、库管理等关键环节。对于需要长期稳定运行的关键业务系统而言,技术选型的延续性和环境的一致性具有极高的工程价值。尤其在工业控制、金融、医疗等对可靠性要求严苛的场景中,系统往往需要持续运行数十年,与特定时期的开发工具深度绑定。因此,维护这些系统时,获取并正确配置其原始的、完整的开发环境成为一项刚需。本文聚焦于经典的VC++ 6.0开发环境,详细解析如何获取和部署包含MSDN、关键补丁及第三
100:vue+cesium: 加载glb文件,随机位置加载2000架飞机
本示例在 Vue + cesium 项目中随机位置加载2000架飞机,飞机是glb文件,每个大小为571kb。这个示例属于性能优化的范畴内,通常如果用entity加载glb只能显示几个飞机,这里采用primitive的方法来加载。直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果.
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™...
【LAMMPS学习】八、基础知识(4.5)TIP5P水模型
五点 TIP5P 刚性水模型通过添加两个通常无质量的附加位点 L 来扩展three-point TIP3P model,其中放置与氧原子相关的电荷。这些位点 L 位于距氧原子固定距离处,形成从 HOH 平面旋转 90 度的四面角。因此,这些位点在某种程度上近似于氧的孤对,从而改善了水结构,与four-point TIP4P model相比变得更加“四面体”。
MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态
执行手眼校准有助于操作配备末端执行器(简称 “手”)的机械臂,该末端执行器依赖于摄像头提供的视觉数据。一旦完成了眼在手外的校准,机械臂就能准确地移动到摄像头识别的特定像素位置。这种能力是执行精确拾放任务(如分类、堆垛和分拣)的基础,即使在摄像机的确切位置和方向未知的情况下也是如此。机器人-摄像机系统有两种构型:眼在手内和眼在手外。在眼在手内构型中,摄像头直接安装在机器人手臂的末端执行器上。相反,在眼在手的构型中,摄像头固定在一个静止的物体上,机器人手臂在其视野内。
SQL Server 2012 安装配置全指南:从环境准备到避坑实战
数据库作为现代信息系统的核心,其安装与配置是数据存储、管理和应用的基础。SQL Server作为主流的关系型数据库管理系统,其安装过程涉及系统环境、组件选择与权限配置等多个技术环节。正确的安装不仅能确保数据库服务的稳定运行,更是后续性能优化与安全管理的前提,尤其在企业遗留系统维护、开发测试环境搭建等场景中至关重要。本文聚焦于SQL Server 2012这一经典版本,针对其**安装失败**的常见问题与**远程连接**的关键配置,提供了从介质获取、环境检查到服务验证的完整解决方案,帮助读者高效完成部署,为后续
YOLOv11的代数不变量解释:Syzygy模分析特征重要性,用交换代数揭示卷积核的语义相关性
本文提出了一种基于代数几何与交换代数的创新方法,特别是运用Syzygy模理论,对YOLOv11目标检测算法的卷积核语义相关性进行数学解释。研究揭示了YOLO系列算法演进背后的代数结构特征,建立了网络组件与多项式环、理想簇等代数概念的对应关系。通过构建分层的准同构代数系统,分析了YOLOv11在不同尺度下保持语义不变性的数学本质。文章系统阐述了Syzygy模在CNN特征冗余分析、跨层依赖关系建模和语义聚类中的应用,并提出了适用于动态稀疏训练的改进算法。该理论框架为深度神经网络的解释性研究提供了新的数学工具,同
Windows网络编程实战:基于MFC与WinSock的C/S通信架构解析与源码调试
网络编程是构建分布式系统的核心技术,其核心在于实现不同主机间的进程通信。其基本原理基于TCP/IP协议栈,通过套接字(Socket)抽象层提供数据传输服务。在Windows平台,WinSock API是实现这一功能的基础,而MFC框架则通过CAsyncSocket等类对其进行了封装,简化了异步事件驱动模型的开发,提升了开发效率。这种技术的核心价值在于能够构建稳定、高效的客户端/服务器(C/S)应用,例如即时通讯、在线游戏和远程控制系统。在实际工程中,开发者常需处理粘包/拆包、并发模型和心跳机制等经典问题。本
倾斜摄影数据转换为3DTile格式的方法:基于CesiumLab GIS
通过使用CesiumLab GIS,倾斜摄影数据可以方便地转换为3DTile格式,并在CesiumJS等3D地理信息可视化工具中进行展示和分析。一旦成功导入3DTile数据,就可以在CesiumLab GIS中利用其强大的可视化和分析功能进行进一步的处理。转换完成后,可以将生成的3DTile数据导入到CesiumLab GIS中进行可视化和分析。启动CesiumLab GIS应用程序,并按照界面上的指导导入转换后的3DTile数据。脚本将开始执行,并将倾斜摄影数据转换为3DTile格式。
MCAL知识点(十):ERU驱动配置详解
ERS:外部请求单元ETL:中断逻辑单元OGU:输出逻辑单元MCU里面配置要使用的功能和选择输入的管脚,注意上述模块关注点讲述的ERU必须和边沿检测模块相关联。
MFC C++跨平台远程桌面实现:架构设计与工程实践
远程桌面控制技术基于客户端-服务器架构,通过网络协议传输屏幕图像与输入指令,实现跨系统操作。其核心原理在于高效的屏幕捕获、编码压缩与网络传输,技术价值在于打破平台壁垒,实现异构系统的统一管理。在工业控制、嵌入式运维等场景中,常需复用现有成熟客户端代码以降低成本。本文聚焦于在传统MFC框架中实现跨平台远程控制,通过协议抽象与平台相关后端分离,使MFC客户端能连接并控制Windows与Linux系统。文中深入探讨了使用X11进行屏幕捕获与输入模拟、以及利用libjpeg-turbo进行图像压缩等关键技术细节,为
蓝牙模块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
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
基于Visual C++的类QQ聊天工具源码详解:从TCP协议到MFC UI的实战解析
网络编程是构建实时通信应用的基石,其核心在于理解TCP/IP协议栈的工作原理。TCP作为面向连接的可靠传输层协议,通过三次握手建立连接、滑动窗口机制保证数据有序可靠送达,并依靠心跳机制维持长连接活性。掌握这些原理对于开发高性能、低延迟的即时通讯(IM)系统至关重要。在工程实践中,开发者需在应用层设计自定义协议以解决TCP的粘包/拆包问题,并利用多线程技术分离网络I/O与用户界面(UI)渲染,确保程序响应流畅。以经典的Visual C++ MFC桌面聊天程序为例,其源码清晰展示了如何将Socket通信、线程同
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
461



被折叠的 条评论
为什么被折叠?



