windows mfc 打印系统信息代码
1 //"[平台:2, 系统:10.0.19044(处理器(586):12), CPU: 12th Gen Intel(R) Core(TM) i5-12400 (2.50GHz), CSD():0.0, 套件掩码:256, 其他信息:1, 内存:15.7GB,虚拟内存:4.0GB]" 2 //系统版本对照表:https://learn.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version 或者 https://learn.microsoft.com/zh-cn/windows/win32/api/winnt/ns-winnt-osversioninfoexa 3 CString GetOSVersion() 4 { 5 //获取cpu名称和主频 6 CHAR chCPUName[50] = { 0 };//cpu名称 7 DWORD dwSize = 50; 8 DWORD dwValue; //主频值 9 CString strPath = _T("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");//注册表子键路径 10 CRegKey regkey;//定义注册表类对象 11 LONG lResult;//LONG型变量-反应结果 12 lResult = regkey.Open(HKEY_LOCAL_MACHINE, LPCTSTR(strPath), KEY_ALL_ACCESS); //打开注册表键 13 if (lResult == ERROR_SUCCESS) 14 { 15 //获取ProcessorNameString字段值 16 if (ERROR_SUCCESS != regkey.QueryStringValue(_T("ProcessorNameString"), chCPUName, &dwSize)) 17 { 18 ZeroMemory(chCPUName, sizeof(chCPUName)); 19 } 20 21 //查询CPU主频 22 if (ERROR_SUCCESS != regkey.QueryDWORDValue(_T("~MHz"), dwValue)) 23 { 24 dwValue = 0; 25 } 26 } 27 28 29 //获取内存信息 30 MEMORYSTATUSEX statex; 31 statex.dwLength = sizeof(statex); 32 GlobalMemoryStatusEx(&statex); 33 DWORDLONG physical_memory = statex.ullTotalPhys / (1024 * 1024); 34 DWORDLONG virtual_totalmemory = statex.ullTotalVirtual / (1024 * 1024); 35 36 37 38 //获取系统信息 39 CString strOSInfo; 40 OSVERSIONINFOEX osvi; 41 SYSTEM_INFO si; 42 BOOL bOSVersionInfoEx; 43 ZeroMemory(&si, sizeof(SYSTEM_INFO)); 44 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); 45 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 46 if (!(bOSVersionInfoEx = GetVersionEx((OSVERSIONINFO*)&osvi))) 47 { 48 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 49 GetVersionEx((OSVERSIONINFO*)&osvi); 50 } 51 52 GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo"); 53 GetSystemInfo(&si); 54 55 strOSInfo.Format("[平台:%d, 系统:%d.%d.%d(处理器(%d):%d), CPU: %s (%.2fGHz), CSD(%s):%d.%d, 套件掩码:%d, 其他信息:%d, 内存:%.1fGB,虚拟内存:%.1fGB]", osvi.dwPlatformId, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber, 56 si.dwProcessorType, si.dwNumberOfProcessors, 57 chCPUName, dwValue / 1000.0, 58 osvi.szCSDVersion, osvi.wServicePackMajor, osvi.wServicePackMinor, osvi.wSuiteMask, osvi.wProductType, 59 physical_memory / 1024.0, virtual_totalmemory / 1024.0); 60 61 //GetVersionEx may be altered or unavailable for releases after Windows 8.1. Instead 62 //win8.1之后系统,获取结果都是 6.2 63 if (osvi.dwMajorVersion >= 6) 64 { 65 //定义变量 66 typedef LONG(__stdcall* fnRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInformation); 67 fnRtlGetVersion pRtlGetVersion; 68 HMODULE hNtdll; 69 LONG ntStatus = 1; 70 ULONG dwMajorVersion = 0; 71 ULONG dwMinorVersion = 0; 72 ULONG dwBuildNumber = 0; 73 RTL_OSVERSIONINFOW VersionInformation = { 0 }; 74 DWORD OsVersion; 75 76 do 77 { 78 hNtdll = GetModuleHandle("ntdll.dll"); 79 if (hNtdll == NULL)break; 80 81 pRtlGetVersion = (fnRtlGetVersion)GetProcAddress(hNtdll, "RtlGetVersion"); 82 if (pRtlGetVersion == NULL)break; 83 84 VersionInformation.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOW); 85 ntStatus = pRtlGetVersion(&VersionInformation); 86 87 if (ntStatus != 0) break; 88 89 dwMajorVersion = VersionInformation.dwMajorVersion; 90 dwMinorVersion = VersionInformation.dwMinorVersion; 91 dwBuildNumber = VersionInformation.dwBuildNumber; 92 93 } while (FALSE); 94 95 if (ntStatus == 0) 96 { 97 strOSInfo.Format("[平台:%d, 系统:%d.%d.%d(处理器(%d):%d), CPU: %s (%.2fGHz), CSD(%s):%d.%d, 套件掩码:%d, 其他信息:%d, 内存:%.1fGB,虚拟内存:%.1fGB]", osvi.dwPlatformId, dwMajorVersion, dwMinorVersion, dwBuildNumber, 98 si.dwProcessorType, si.dwNumberOfProcessors, 99 chCPUName, dwValue/1000.0, 100 osvi.szCSDVersion, osvi.wServicePackMajor, osvi.wServicePackMinor, osvi.wSuiteMask, osvi.wProductType, 101 physical_memory / 1024.0, virtual_totalmemory / 1024.0); 102 } 103 } 104 return strOSInfo; 105 }
1 //"[平台:2, 系统:10.0.19044(处理器(586):12), CPU: 12th Gen Intel(R) Core(TM) i5-12400 (2.50GHz), CSD():0.0, 套件掩码:256, 其他信息:1, 内存:15.7GB,虚拟内存:4.0GB]" 2 //系统版本对照表:https://learn.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version 或者 https://learn.microsoft.com/zh-cn/windows/win32/api/winnt/ns-winnt-osversioninfoexa 3 //By SamRichard https://home.cnblogs.com/u/SamRichard/ 4 CString GetOSVersion() 5 { 6 //获取cpu名称和主频 7 CHAR chCPUName[50] = { 0 };//cpu名称 8 DWORD dwSize = 50; 9 DWORD dwValue; //主频值 10 CString strPath = _T("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");//注册表子键路径 11 CRegKey regkey;//定义注册表类对象 12 LONG lResult;//LONG型变量-反应结果 13 lResult = regkey.Open(HKEY_LOCAL_MACHINE, LPCTSTR(strPath), KEY_ALL_ACCESS); //打开注册表键 14 if (lResult == ERROR_SUCCESS) 15 { 16 //获取ProcessorNameString字段值 17 if (ERROR_SUCCESS != regkey.QueryStringValue(_T("ProcessorNameString"), chCPUName, &dwSize)) 18 { 19 ZeroMemory(chCPUName, sizeof(chCPUName)); 20 } 21 22 //查询CPU主频 23 if (ERROR_SUCCESS != regkey.QueryDWORDValue(_T("~MHz"), dwValue)) 24 { 25 dwValue = 0; 26 } 27 } 28 29 30 //获取内存信息 31 MEMORYSTATUSEX statex; 32 statex.dwLength = sizeof(statex); 33 GlobalMemoryStatusEx(&statex); 34 DWORDLONG physical_memory = statex.ullTotalPhys / (1024 * 1024); 35 DWORDLONG virtual_totalmemory = statex.ullTotalVirtual / (1024 * 1024); 36 37 38 39 //获取系统信息 40 CString strOSInfo; 41 OSVERSIONINFOEX osvi; 42 SYSTEM_INFO si; 43 BOOL bOSVersionInfoEx; 44 ZeroMemory(&si, sizeof(SYSTEM_INFO)); 45 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); 46 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 47 if (!(bOSVersionInfoEx = GetVersionEx((OSVERSIONINFO*)&osvi))) 48 { 49 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 50 GetVersionEx((OSVERSIONINFO*)&osvi); 51 } 52 53 GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo"); 54 GetSystemInfo(&si); 55 56 strOSInfo.Format("[平台:%d, 系统:%d.%d.%d(处理器(%d):%d), CPU: %s (%.2fGHz), CSD(%s):%d.%d, 套件掩码:%d, 其他信息:%d, 内存:%.1fGB,虚拟内存:%.1fGB]", osvi.dwPlatformId, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber, 57 si.dwProcessorType, si.dwNumberOfProcessors, 58 chCPUName, dwValue / 1000.0, 59 osvi.szCSDVersion, osvi.wServicePackMajor, osvi.wServicePackMinor, osvi.wSuiteMask, osvi.wProductType, 60 physical_memory / 1024.0, virtual_totalmemory / 1024.0); 61 62 //GetVersionEx may be altered or unavailable for releases after Windows 8.1. Instead 63 //win8.1之后系统,获取结果都是 6.2 64 if (osvi.dwMajorVersion >= 6) 65 { 66 //定义变量 67 typedef LONG(__stdcall* fnRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInformation); 68 fnRtlGetVersion pRtlGetVersion; 69 HMODULE hNtdll; 70 LONG ntStatus = 1; 71 ULONG dwMajorVersion = 0; 72 ULONG dwMinorVersion = 0; 73 ULONG dwBuildNumber = 0; 74 RTL_OSVERSIONINFOW VersionInformation = { 0 }; 75 DWORD OsVersion; 76 77 do 78 { 79 hNtdll = GetModuleHandle("ntdll.dll"); 80 if (hNtdll == NULL)break; 81 82 pRtlGetVersion = (fnRtlGetVersion)GetProcAddress(hNtdll, "RtlGetVersion"); 83 if (pRtlGetVersion == NULL)break; 84 85 VersionInformation.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOW); 86 ntStatus = pRtlGetVersion(&VersionInformation); 87 88 if (ntStatus != 0) break; 89 90 dwMajorVersion = VersionInformation.dwMajorVersion; 91 dwMinorVersion = VersionInformation.dwMinorVersion; 92 dwBuildNumber = VersionInformation.dwBuildNumber; 93 94 } while (FALSE); 95 96 if (ntStatus == 0) 97 { 98 strOSInfo.Format("[平台:%d, 系统:%d.%d.%d(处理器(%d):%d), CPU: %s (%.2fGHz), CSD(%s):%d.%d, 套件掩码:%d, 其他信息:%d, 内存:%.1fGB,虚拟内存:%.1fGB]", osvi.dwPlatformId, dwMajorVersion, dwMinorVersion, dwBuildNumber, 99 si.dwProcessorType, si.dwNumberOfProcessors, 100 chCPUName, dwValue/1000.0, 101 osvi.szCSDVersion, osvi.wServicePackMajor, osvi.wServicePackMinor, osvi.wSuiteMask, osvi.wProductType, 102 physical_memory / 1024.0, virtual_totalmemory / 1024.0); 103 } 104 } 105 return strOSInfo; 106 }
posted on 2023-03-14 10:41 Sam.Richard 阅读(159) 评论(0) 编辑 收藏 举报