zoukankan      html  css  js  c++  java
  • C/C++获取CPU等硬件信息&&屏幕截图

    打算练习Socket的时候用用,最近有点小事情,没时间继续完善,先把写的这些代码贴上来,有空了再完善一下。

    HardwareInfo.h

      1 #include <stdio.h>
      2 #include <windows.h>
      3 #include <vfw.h>
      4 
      5 #pragma comment(lib,"Vfw32.lib")
      6 #pragma comment(lib,"winmm.lib")
      7 #ifndef VER_NT_WORKSTATION
      8 #define VER_NT_WORKSTATION 1
      9 #endif
     10 
     11 /*
     12     // vc6.0需定义
     13 typedef struct _MEMORYSTATUSEX {
     14     DWORD dwLength;                        // 结构体数据大小 sizeof(_MEMORYSTATUSEX)
     15     DWORD dwMemoryLoad;                    // 内存使用率
     16     LONGLONG ullTotalPhys;                    // 物理内存总大小(单位:字节)
     17     LONGLONG ullAvailPhys;                    // 物理内存可用大小(单位:字节)
     18     LONGLONG ullTotalPageFile;                // 总页面大小(物理内存总大小+硬盘划分的虚拟内存总大小)(单位:字节)
     19     LONGLONG ullAvailPageFile;                // 当前进程能获取的最大内存数(单位:字节)
     20     LONGLONG ullTotalVirtual;                // 当前进程最大内存寻址地址(默认2GB,开启大地址后就是4GB)
     21     LONGLONG ullAvailVirtual;                // 当前进程可用最大内存(单位:字节)
     22     LONGLONG ullAvailExtendedVirtual;
     23 } MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
     24 */
     25 typedef struct _OSVERSIONINFOEXA1 {
     26     DWORD dwOSVersionInfoSize;
     27     DWORD dwMajorVersion;
     28     DWORD dwMinorVersion;
     29     DWORD dwBuildNumber;
     30     DWORD dwPlatformId;
     31     CHAR  szCSDVersion[128];
     32     WORD  wServicePackMajor;
     33     WORD  wServicePackMinor;
     34     WORD  wSuiteMask;
     35     BYTE  wProductType;
     36     BYTE  wReserved;
     37 } OSVERSIONINFOEXA1, *POSVERSIONINFOEXA1, *LPOSVERSIONINFOEXA1;
     38 
     39 
     40 /*
     41     屏幕截图
     42     lpData:存放截图数据指针
     43     hWnd  :目标窗口,默认为桌面
     44     成功返回截图数据大小,失败返回0.
     45 */
     46 DWORD PrtScr(PCHAR *lpData, HWND hWnd = 0);
     47 
     48 /*
     49     是否有摄像头
     50     有摄像头返回TRUE,否则返回FALSE
     51 */
     52 BOOL HaveCameras(void);
     53 
     54 /*
     55     获取CPU名称
     56     成功返回CPU名称,失败返回NULL(VS2013不支持Debug模式下获取)
     57 */
     58 LPSTR GetCPUName(void);
     59 
     60 /*
     61     获取CPU制造商
     62     成功返回CPU制造商,失败返回NULL(VS2013不支持Debug模式下获取)
     63 */
     64 LPSTR GetCPUManufacturer(void);
     65 
     66 /*
     67     获取声卡名字
     68     成功返回声卡名字,失败返回NULL
     69 */
     70 LPSTR GetSoundCarName(void);
     71 
     72 /*
     73     获取磁盘容量信息
     74     diskPath:盘符
     75     used:已用空间
     76     freed:剩余空间
     77     total:总空间
     78     成功返回TRUE,失败返回FALSE
     79 */
     80 BOOL GetDiskSpaceInfo(LPSTR diskPath, float *used, float *freed, float *total);
     81 
     82 /*
     83     获取运行内存总额
     84     返回运存总额
     85 */
     86 FLOAT GetSysRam(void);
     87 
     88 /*
     89     获取运存已用比例
     90     返回运存已用比例
     91 */
     92 DWORD GetRamProportion(void);
     93 
     94 /*
     95     获取系统启动时间
     96     返回格式化文本字符串
     97 */
     98 LPSTR GetSysStartTime(void);
     99 
    100 /*
    101     获取系统信息
    102     dwMajor:高版本位
    103     dwMinjor:低版本位
    104     bDesc:是否获取系统描述
    105     bBit:是否获取位数
    106     bSPVer:是否获取系统补丁包版本
    107     bBuildVer:是否获取内部版本
    108     成功返回系统信息字符串,失败返回NULL
    109 */
    110 LPSTR GetSysInfo(DWORD *dwMajor = NULL, DWORD *dwMinjor = NULL, BOOL bDesc = FALSE, BOOL bBit = FALSE, BOOL bSPVer = FALSE, BOOL bBuildVer = FALSE);
    View Code

    HardwareInfo.cpp

      1 #include "HardwareInfo.h"
      2 
      3 int main(void)
      4 {
      5 
      6     LPSTR lpCPUName = GetCPUName();
      7     LPSTR lpCPUManu = GetCPUManufacturer();
      8     LPSTR lpSoundCarName = GetSoundCarName();
      9     printf("处理器: %s
    
    ", lpCPUName);
     10     printf("CPU制造商: %s
    
    ", lpCPUManu);
     11     printf("声卡: %s
    
    ", lpSoundCarName);
     12     float used, usable, total;
     13     GetDiskSpaceInfo("D:", &used, &usable, &total);
     14     printf("D盘 已用: %.1fG, 可用:%.1fG, 总大小:%.1fG
    
    ", used, usable, total);
     15     printf("运行内存: %.1fG, 已用%d%%
    
    ", GetSysRam(), GetRamProportion());
     16     LPSTR lpStartTime = GetSysStartTime();
     17     printf("已开机:  %s
    
    ", GetSysStartTime());
     18     LPSTR lpSysVer = GetSysInfo(0, 0, 1, 1, 1);
     19     printf("系统版本: %s
    
    ", lpSysVer);
     20     free(lpCPUName);
     21     free(lpCPUManu);
     22     free(lpSoundCarName);
     23     free(lpStartTime);
     24     free(lpSysVer);
     25 
     26     Sleep(1000);
     27     DWORD dwLen = 0;
     28     char *lpData = NULL;
     29 
     30     dwLen = PrtScr(&lpData);
     31     FILE *wj = NULL;
     32     fopen_s(&wj, "c:\1.bmp", "wb");
     33     fwrite(lpData, dwLen, 1, wj);
     34     fclose(wj);
     35     free(lpData);
     36     system("c:\1.bmp");
     37     system("pause");
     38     return 0;
     39 }
     40 
     41 DWORD PrtScr(PCHAR *lpData, HWND hWnd)
     42 {
     43     HDC hdcScreen, hdcMem;
     44     RECT rc = { 0 }, desRc = { 0 };
     45     HBITMAP hbmScreen = NULL;
     46     BITMAP bmpScreen = { 0 };
     47     BITMAPINFOHEADER bitInfo = { 0 };
     48     BITMAPFILEHEADER bitHead = { 0 };
     49     DWORD dwBmpSize, dwSizeofDIB;
     50     char *lpbitmap = NULL;
     51     int width, height;
     52 
     53     if (!hWnd)
     54         hWnd = GetDesktopWindow();
     55     GetWindowRect(hWnd, &rc);
     56     GetWindowRect(GetDesktopWindow(), &desRc);
     57 
     58     hdcScreen = GetDC(NULL);
     59     hdcMem = CreateCompatibleDC(hdcScreen);
     60     if (!hdcMem)
     61         return 0;
     62     hbmScreen = CreateCompatibleBitmap(hdcScreen, rc.right - rc.left, rc.bottom - rc.top);
     63     if (!hbmScreen)
     64         return 0;
     65     SelectObject(hdcMem, hbmScreen);
     66     width = (rc.right > desRc.right) ? (desRc.right - rc.left) : (rc.right - rc.left);
     67     height = (rc.bottom > desRc.bottom) ? (desRc.bottom - rc.top) : (rc.bottom - rc.top);
     68     if (!BitBlt(hdcMem, 0, 0, width, height, hdcScreen, rc.left, rc.top, SRCCOPY))
     69         return 0;
     70     GetObject(hbmScreen, sizeof(BITMAP), &bmpScreen);
     71 
     72     bitInfo.biSize = sizeof(BITMAPINFOHEADER);
     73     bitInfo.biWidth = width;
     74     bitInfo.biHeight = height;
     75     bitInfo.biPlanes = 1;
     76     bitInfo.biBitCount = 32;
     77     bitInfo.biCompression = BI_RGB;
     78 
     79     dwBmpSize = ((bmpScreen.bmWidth * bitInfo.biBitCount + 31) / 32) * 4 * bmpScreen.bmHeight;
     80     lpbitmap = (char *)malloc(dwBmpSize);
     81     if (!lpbitmap)
     82         return 0;
     83     GetDIBits(hdcScreen, hbmScreen, 0, (UINT)bmpScreen.bmHeight, lpbitmap, (BITMAPINFO *)&bitInfo, DIB_RGB_COLORS);
     84 
     85     dwSizeofDIB = dwBmpSize + sizeof(bitHead)+sizeof(bitInfo);
     86     bitHead.bfOffBits = (DWORD)sizeof(bitHead)+(DWORD)sizeof(bitInfo);
     87     bitHead.bfSize = dwSizeofDIB;
     88     // 必须是字符BM或者十六进制代替0x4D42="BM"
     89     bitHead.bfType = MAKEWORD('B', 'M');
     90 
     91     *lpData = (char *)malloc(dwSizeofDIB);
     92     if (!*lpData)
     93         return 0;
     94     memmove(*lpData, &bitHead, sizeof(bitHead));
     95     memmove(*lpData + sizeof(bitHead), &bitInfo, sizeof(bitInfo));
     96     memmove(*lpData + sizeof(bitHead)+sizeof(bitInfo), lpbitmap, dwBmpSize);
     97     free(lpbitmap);
     98     DeleteObject(hbmScreen);
     99     DeleteObject(hdcMem);
    100     ReleaseDC(NULL, hdcScreen);
    101     return dwSizeofDIB;
    102 }
    103 
    104 BOOL HaveCameras(void)
    105 {
    106     char ver[256] = { 0 }, name[256] = { 0 };
    107     UINT num = 0;
    108 
    109     do
    110     {
    111         memset(name, 0, 256);
    112         if (capGetDriverDescription(num, name, 100, ver, 100))
    113         {
    114             num++;
    115         }
    116     } while (lstrlen(name));
    117     return (num ? TRUE : FALSE);
    118 }
    119 
    120 LPSTR GetCPUName(void)
    121 {
    122     LPSTR lpName = (LPSTR)malloc(100);
    123     memset(lpName, 0, 100);
    124 
    125     __asm{
    126         PUSHAD
    127             MOV EAX, 0x80000002
    128             CPUID
    129             MOV ESI, [EBP - 0x4]
    130             MOV SS : [ESI], EAX
    131             MOV SS : [ESI + 0x4], EBX
    132             MOV SS : [ESI + 0x8], ECX
    133             MOV SS : [ESI + 0xC], EDX
    134             MOV EAX, 0x80000003
    135             CPUID
    136             MOV SS : [ESI + 0x10], EAX
    137             MOV SS : [ESI + 0x14], EBX
    138             MOV SS : [ESI + 0x18], ECX
    139             MOV SS : [ESI + 0x1C], EDX
    140             MOV EAX, 0x80000004
    141             CPUID
    142             MOV SS : [ESI + 0x20], EAX
    143             MOV SS : [ESI + 0x24], EBX
    144             MOV SS : [ESI + 0x28], ECX
    145             MOV SS : [ESI + 0x2C], EDX
    146             POPAD
    147     }
    148     return lpName;
    149 }
    150 
    151 LPSTR GetCPUManufacturer(void)
    152 {
    153     LPSTR lpStr = (LPSTR)malloc(20);
    154     memset(lpStr, 0, 20);
    155 
    156     __asm{
    157         PUSHAD
    158             XOR EAX, EAX
    159             CPUID
    160             MOV EAX, DWORD PTR SS : [EBP - 0x4]
    161             MOV DWORD PTR SS : [EAX], EBX
    162             MOV DWORD PTR SS : [EAX + 0x4], EDX
    163             MOV DWORD PTR SS : [EAX + 0x8], ECX
    164             POPAD
    165     }
    166 
    167     if (!lstrcmp("GenuineIntel", lpStr))
    168         memmove(lpStr, "Intel Corporation.", 20);
    169     else if (!lstrcmp("AuthenticAMD", lpStr))
    170         memmove(lpStr, "Advanced Micro Devices.", 20);
    171     else if (!lstrcmp("AMD ISBETTER", lpStr))
    172         memmove(lpStr, "Advanced Micro Devices.", 20);
    173     else if (!lstrcmp("Geode By NSC", lpStr))
    174         memmove(lpStr, "National Semiconductor.", 20);
    175     else if (!lstrcmp("CyrixInstead", lpStr))
    176         memmove(lpStr, "Cyrix Corp., VIA Inc.", 20);
    177     else if (!lstrcmp("NexGenDriven", lpStr))
    178         memmove(lpStr, "NexGen Inc., Advanced Micro Devices.", 20);
    179     else if (!lstrcmp("CentaurHauls", lpStr))
    180         memmove(lpStr, "IDT\Centaur, Via Inc.", 20);
    181     else if (!lstrcmp("UMC UMC UMC ", lpStr))
    182         memmove(lpStr, "United Microelectronics Corp.", 20);
    183     else if (!lstrcmp("RiseRiseRise", lpStr))
    184         memmove(lpStr, "Rise.", 20);
    185     else if (!lstrcmp("GenuineTMx86", lpStr))
    186         memmove(lpStr, "Transmeta.", 20);
    187     else if (!lstrcmp("TransmetaCPU", lpStr))
    188         memmove(lpStr, "Transmeta.", 20);
    189     else
    190         memmove(lpStr, "Unknown Manufacturer.", 20);
    191 
    192     return lpStr;
    193 }
    194 
    195 LPSTR GetSoundCarName(void)
    196 {
    197     WAVEOUTCAPS wav = { 0 };
    198     LPSTR lpName = (LPSTR)malloc(50);
    199 
    200     waveOutGetDevCaps(0, &wav, sizeof(wav));
    201     
    202     // 有点电脑获取的数据不完整,缺失 " Audio)",为了美观获取不到的手动加入
    203     if (wav.szPname[lstrlen(wav.szPname)-1] != ')')
    204         sprintf_s(lpName, 50, "%s Audio)", wav.szPname);
    205     else
    206         sprintf_s(lpName, 50, "%s", wav.szPname);
    207     return lpName;
    208 }
    209 
    210 BOOL GetDiskSpaceInfo(LPSTR diskPath, float *used, float *freed, float *total)
    211 {
    212     ULARGE_INTEGER a1, b1, c1;
    213     LONGLONG a, b, c;
    214     float v1, v2, v3;
    215     if (!GetDiskFreeSpaceEx(diskPath, &a1, &b1, &c1))
    216         return FALSE;
    217 
    218     a = (LONGLONG)a1.QuadPart;
    219     b = (LONGLONG)b1.QuadPart;
    220     c = (LONGLONG)c1.QuadPart;
    221     c = b - a;
    222 
    223     v1 = (float)(a / (1024 * 1024 * 1024.0));
    224     v2 = (float)(b / (1024 * 1024 * 1024.0));
    225     v3 = (float)(c / (1024 * 1024 * 1024.0));
    226 
    227     memmove(used, &v3, sizeof(float));
    228     memmove(freed, &v1, sizeof(float));
    229     memmove(total, &v2, sizeof(float));
    230 
    231     return TRUE;
    232 }
    233 
    234 FLOAT GetSysRam(void)
    235 {
    236     typedef BOOL(WINAPI *func)(LPMEMORYSTATUSEX);
    237     MEMORYSTATUSEX stMem = { 0 };
    238 
    239     func GlobalMemoryStatusEx = (func)GetProcAddress(LoadLibrary("Kernel32.dll"), "GlobalMemoryStatusEx");
    240     stMem.dwLength = sizeof(stMem);
    241     GlobalMemoryStatusEx(&stMem);
    242     return (FLOAT)(stMem.ullTotalPhys / (1024 * 1024 * 1024.0));
    243 }
    244 
    245 DWORD GetRamProportion(void)
    246 {
    247     typedef BOOL(WINAPI *func)(LPMEMORYSTATUSEX);
    248     MEMORYSTATUSEX stMem = { 0 };
    249 
    250     func GlobalMemoryStatusEx = (func)GetProcAddress(LoadLibrary("Kernel32.dll"), "GlobalMemoryStatusEx");
    251     stMem.dwLength = sizeof(stMem);
    252     GlobalMemoryStatusEx(&stMem);
    253     return stMem.dwMemoryLoad;
    254 }
    255 
    256 LPSTR GetSysStartTime(void)
    257 {
    258     LPSTR lpStr = (LPSTR)malloc(sizeof(char)* 50);
    259     DWORD dwStart = GetTickCount();
    260     DWORD day, hou, min, sec;
    261 
    262     day = dwStart / (1000 * 60 * 60 * 24);
    263     hou = dwStart / (1000 * 60 * 60) - day * 24;
    264     min = dwStart / (1000 * 60) - day * 24 * 60 - hou * 60;
    265     sec = dwStart / (1000) - day * 24 * 60 * 60 - hou * 60 * 60 - min * 60;
    266 
    267     sprintf_s(lpStr, 50, "%d天%d小时%d分钟%d秒", day, hou, min, sec);
    268     return lpStr;
    269 }
    270 
    271 LPSTR GetSysInfo(DWORD *dwMajor, DWORD *dwMinjor, BOOL bDesc, BOOL bBit, BOOL bSPVer, BOOL bBuildVer)
    272 {
    273     OSVERSIONINFOEXA1 osvi = { 0 };
    274     SYSTEM_INFO si = { 0 };
    275     BOOL bWow64 = FALSE;
    276     DWORD dwType = 0, dwBuild = 0;
    277     char strSys[100] = { 0 }, strVer[20] = { 0 };
    278 
    279     osvi.dwOSVersionInfoSize = sizeof(osvi);
    280     typedef BOOL(WINAPI *fun)(LPOSVERSIONINFOEXA1);
    281     fun GetVersionEx1 = (fun)GetProcAddress(LoadLibrary("Kernel32.dll"), "GetVersionExA");
    282     if (GetVersionEx1(&osvi))
    283     {
    284         dwBuild = osvi.dwBuildNumber;
    285         GetSystemInfo(&si);
    286 
    287         typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
    288         LPFN_ISWOW64PROCESS IsWow64Process1 = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle("kernel32"), "IsWow64Process");
    289         IsWow64Process1((void *)-1, &bWow64);
    290 
    291         typedef void (WINAPI *func)(DWORD *, DWORD *, DWORD *);
    292         func RtlGetNtVersionNumbers = (func)GetProcAddress(LoadLibrary("ntdll.dll"), "RtlGetNtVersionNumbers");
    293         RtlGetNtVersionNumbers(&osvi.dwMajorVersion, &osvi.dwMinorVersion, &osvi.dwBuildNumber);
    294 
    295         if (dwMajor)
    296             *dwMajor = osvi.dwMajorVersion;
    297         if (dwMinjor)
    298             *dwMinjor = osvi.dwMinorVersion;
    299 
    300         if (osvi.dwMajorVersion == 10)
    301         {
    302             if (osvi.dwMinorVersion == 0)
    303             {
    304                 lstrcpyn(strSys, (osvi.wProductType == VER_NT_WORKSTATION ? "Windows 10" : "Windows Server 2016"), 100);
    305             }
    306         }
    307         else if (osvi.dwMajorVersion == 6)
    308         {
    309             if (osvi.dwMinorVersion == 0)
    310             {
    311                 lstrcpyn(strSys, (osvi.wProductType == VER_NT_WORKSTATION ? "Windows Vista" : "Windows Server 2008"), 100);
    312             }
    313             else if (osvi.dwMinorVersion == 1)
    314             {
    315                 lstrcpyn(strSys, (osvi.wProductType == VER_NT_WORKSTATION ? "Windows 7" : "Windows Server 2008 R2"), 100);
    316             }
    317             else if (osvi.dwMinorVersion == 2)
    318             {
    319                 lstrcpyn(strSys, (osvi.wProductType == VER_NT_WORKSTATION ? "Windows 8" : "Windows Server 2012"), 100);
    320             }
    321             else if (osvi.dwMinorVersion == 3)
    322             {
    323                 lstrcpyn(strSys, (osvi.wProductType == VER_NT_WORKSTATION ? "Windows 8.1" : "Windows Server 2012 R2"), 100);
    324             }
    325         }
    326         else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
    327         {
    328             lstrcpyn(strSys, "Windows 2000", 100);
    329             if (osvi.wProductType == 1)
    330             {
    331                 lstrcpyn(strVer, "Professional", 20);
    332             }
    333             else if ((osvi.wSuiteMask & 128) == 0)
    334             {
    335                 lstrcpyn(strVer, "Datacenter Server", 20);
    336             }
    337             else if ((osvi.wSuiteMask & 2) == 0)
    338             {
    339                 lstrcpyn(strVer, "Advanced Server", 20);
    340             }
    341             else
    342             {
    343                 lstrcpyn(strVer, "Server", 20);
    344             }
    345         }
    346         else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
    347         {
    348             lstrcpyn(strSys, "Windows XP", 100);
    349             if ((osvi.wSuiteMask & 512) == 1)
    350             {
    351                 lstrcpyn(strVer, "Home Edition", 20);    // 家庭版 
    352             }
    353             else
    354             {
    355                 lstrcpyn(strVer, "Professional", 20);    // 专业版 
    356             }
    357         }
    358         else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
    359         {
    360             if (GetSystemMetrics(89) != 0)
    361             {
    362                 lstrcpyn(strSys, "Windows Server 2003 R2, ", 100);
    363             }
    364             else if ((osvi.wSuiteMask & 8192) == 8192)
    365             {
    366                 lstrcpyn(strSys, "Windows Storage Server 2003", 100);
    367             }
    368             else if ((osvi.wSuiteMask & 32768) == 32768)
    369             {
    370                 lstrcpyn(strSys, "Windows Home Server", 100);
    371             }
    372             else if (osvi.wProductType == 1 && si.wProcessorArchitecture == 9)
    373             {
    374                 lstrcpyn(strSys, "Windows XP Professional x64 Edition", 100);    // XP专业版64位系统 
    375             }
    376             else
    377             {
    378                 lstrcpyn(strSys, "Windows Server 2003, ", 100);
    379             }
    380         }
    381         else if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
    382         {
    383             lstrcpyn(strSys, "Windows 98", 100);
    384         }
    385         else if (osvi.dwMajorVersion >= 6)
    386         {
    387             typedef BOOL(WINAPI *pGetProductInfo)(DWORD, DWORD, DWORD, DWORD, PDWORD);
    388             pGetProductInfo RtlGetProductInfo = (pGetProductInfo)GetProcAddress(LoadLibrary("Kernel32.dll"), "RtlGetProductInfo");
    389             RtlGetProductInfo(osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);
    390 
    391             switch (dwType)
    392             {
    393             case 1:    // 旗舰版 
    394                 lstrcpyn(strVer, "Ultimate Edition", 20);
    395                 break;
    396             case 2:    // 家庭普通版 
    397                 lstrcpyn(strVer, "Home Basic Edition", 20);
    398                 break;
    399             case 3:    // 家庭高级版 
    400                 lstrcpyn(strVer, "Home Premiu Edition", 20);
    401                 break;
    402             case 4:    // 企业版 
    403                 lstrcpyn(strVer, "Enterprise Edition", 20);
    404                 break;
    405             case 6:    // 商业版 
    406                 lstrcpyn(strVer, "Business Edition", 20);
    407                 break;
    408             case 7:    // 服务器标准版 
    409                 lstrcpyn(strVer, "Standard", 20);
    410                 break;
    411             case 8:    // 服务器企业版 
    412                 lstrcpyn(strVer, "Datacenter Edition", 20);
    413                 break;
    414             case 9:    // 小型服务器 
    415                 lstrcpyn(strVer, "Small Business Server", 20);
    416                 break;
    417             case 10:    // 服务器企业版(完整的安装) 
    418                 lstrcpyn(strVer, "Enterprise Edition", 20);
    419                 break;
    420             case 11:    // 入门版 
    421                 lstrcpyn(strVer, "Starter Edition", 20);
    422                 break;
    423             case 12:    // 服务器数据中心版(核心安装) 
    424                 lstrcpyn(strVer, "Datacenter Edition (core installation)", 20);
    425                 break;
    426             case 13:    // 服务器标准版(核心安装) 
    427                 lstrcpyn(strVer, "Standard Edition (core installation)", 20);
    428                 break;
    429             case 14:    // 服务器企业版(核心安装) 
    430                 lstrcpyn(strVer, "Enterprise Edition (core installation)", 20);
    431                 break;
    432             case 15:    // 一个企业级的平台 
    433                 lstrcpyn(strVer, "Enterprise Edition for Itanium-based Systems", 20);
    434                 break;
    435             case 16:    // 商用公司版 
    436                 lstrcpyn(strVer, "Business N", 20);
    437                 break;
    438             case 17:    // Web服务器(完整安装) 
    439                 lstrcpyn(strVer, "Web Server (full installation)", 20);
    440                 break;
    441             case 18:    // 服务器群集版 
    442                 lstrcpyn(strVer, "HPC Edition", 20);
    443                 break;
    444             case 19:    // 2008 R2 储存服务器版 
    445                 lstrcpyn(strVer, "Windows Storage Server 2008 R2 Essentials", 20);
    446                 break;
    447             case 20:    // 服务器快速储存版 
    448                 lstrcpyn(strVer, "Storage Server Express", 20);
    449                 break;
    450             case 21:    // 服务器标准储存版 
    451                 lstrcpyn(strVer, "Storage Server Standard", 20);
    452                 break;
    453             case 22:    // 服务器储存组 
    454                 lstrcpyn(strVer, "Storage Server Workgroup", 20);
    455                 break;
    456             case 23:    // 服务器储存企业版 
    457                 lstrcpyn(strVer, "Storage Server Enterprise", 20);
    458                 break;
    459             case 25:    // 小型商业服务器 
    460                 lstrcpyn(strVer, "Small Business Server Premium Edition", 20);
    461                 break;
    462             case 48:    // 专业版
    463                 lstrcpyn(strVer, "Professional", 20);
    464                 break;
    465             }
    466         }
    467     }
    468     if (lstrlen(strSys) < 2)
    469     {
    470         sprintf_s(strSys, 100, "获取失败,请检查版本:%d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);
    471         return NULL;
    472     }
    473     else
    474     {
    475         LPSTR lpStr = (LPSTR)malloc(sizeof(char)* 100);
    476 
    477         lstrcpyn(lpStr, strSys, lstrlenA(strSys) + 1);
    478         if (bDesc)
    479         {
    480             lstrcatA(lpStr, " ");
    481             lstrcatA(lpStr, strVer);
    482         }
    483         if (bBit)
    484             lstrcatA(lpStr, (bWow64 ? " x64 " : " x86 "));
    485         if (bSPVer)
    486             lstrcatA(lpStr, (LPCSTR)&osvi.szCSDVersion);
    487         if (bBuildVer)
    488             sprintf_s(lpStr,100, "%s,Build:%d", lpStr, dwBuild);
    489         return lpStr;
    490     }
    491     return NULL;
    492 }
    View Code

     效果图

  • 相关阅读:
    【常见问题汇总--持续更新】bootloader常见问题
    UCD9222 EN1/EN2
    cdce62005配置说明
    xilinx planahead partial reconfiguration
    诺基亚 920T
    不出现用户帐户控制-让Win7的用户账户控制(UAC)放过信任的程序
    python 拷贝文件夹下的文件 到 另一个文件夹
    python 计算两个日期间的小时数
    shell 解析 json
    shell 脚本运行 hive sql
  • 原文地址:https://www.cnblogs.com/biaoge140/p/9749169.html
Copyright © 2011-2022 走看看