#ifdef _DEBUG#endif // _DEBUG#include <windows.h> #include <stdio.h> enum ...{TXT_NORM,TXT_BRED,TXT_BGREEN,TXT_BBLUE,TXT_BWHITE}; void DriverInfo(); void SysInfo(); BOOL SetTextColor(int); void main() ...{ SetTextColor(TXT_BWHITE); printf(" _.-=[ InfoGather by nop]=-._ "); SetTextColor(TXT_NORM); SysInfo(); DriverInfo(); } void SysInfo() ...{ // 操作系统版本号 OSVERSIONINFOEX OsVerInfo; OsVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); GetVersionEx((OSVERSIONINFO *)&OsVerInfo); // 注意转换类型 // CPU个数 :-< SYSTEM_INFO SystemInfo; GetSystemInfo(&SystemInfo); char ComputerName[MAX_PATH + 1]; char CurrentUserName[MAX_PATH + 1]; DWORD dwLenth = MAX_PATH; // 计算机名 GetComputerName(ComputerName, &dwLenth); dwLenth = MAX_PATH; // 当前用户名 if(GetUserName(CurrentUserName, &dwLenth) == NULL) printf("%d ", GetLastError()); // 开机时间(毫秒) DWORD Uptime = GetTickCount(); int Days = Uptime/1000/3600/24; int Hours = Uptime/1000/3600 - Days*24; int Minutes = Uptime/1000/60 - Days*24*60 - Hours*60; int Seconds = Uptime/1000 - Days*24*3600 - Hours*3600 - Minutes*60; // 显示器信息 HDC hScrDC = CreateDC("Display", NULL, NULL, NULL); int xScrn = GetDeviceCaps(hScrDC, HORZRES); int yScrn = GetDeviceCaps(hScrDC, VERTRES); int Bit = GetDeviceCaps(hScrDC, BITSPIXEL); int Hz = GetDeviceCaps(hScrDC, VREFRESH); DeleteDC(hScrDC); // 内存信息 MEMORYSTATUS MemInfo; MemInfo.dwLength=sizeof(MemInfo); GlobalMemoryStatus(&MemInfo); // 输出信息 printf("用户@计算机: %s@%s ", CurrentUserName, ComputerName); printf("运行时间: %1d天%2d小时%2d分%2d秒 ", Days, Hours, Minutes, Seconds); printf("系统版本: Windows "); switch (OsVerInfo.dwPlatformId) ...{ case VER_PLATFORM_WIN32_NT: if ( OsVerInfo.dwMajorVersion <= 4 ) printf("NT "); if ( OsVerInfo.dwMajorVersion == 5 && OsVerInfo.dwMinorVersion == 0 ) printf("2000 "); if ( OsVerInfo.dwMajorVersion == 5 && OsVerInfo.dwMinorVersion == 1 ) printf("XP "); if ( OsVerInfo.dwMajorVersion == 5 && OsVerInfo.dwMinorVersion == 2 ) printf("2003 "); } printf("Service Pack %d.%d(Build %d) ", //OsVerInfo.szCSDVersion, OsVerInfo.wServicePackMajor, OsVerInfo.wServicePackMinor, OsVerInfo.dwBuildNumber); printf("CPU个数: %d个 ", SystemInfo.dwNumberOfProcessors); // CPU名称,频率 DWORD dwFrequence; char szCPUName[MAX_PATH]; DWORD dwRegDw = REG_DWORD; DWORD dwRegSz = REG_SZ; DWORD dwDw = sizeof(DWORD); HKEY hKey; char szCPUKey[]="HARDWAREDESCRIPTIONSystemCentralProcessor/0/"; // 这里用szCPUKey[0x2d] 来控制所访问的注册表项有点不好 for( ; szCPUKey[0x2d]-48 < SystemInfo.dwNumberOfProcessors; szCPUKey[0x2d]++) ...{ dwLenth = MAX_PATH + 1; RegOpenKeyEx(HKEY_LOCAL_MACHINE, szCPUKey, NULL, KEY_READ, &hKey); RegQueryValueEx(hKey, "~MHz", NULL, &dwRegDw, (LPBYTE)&dwFrequence, &dwDw); RegQueryValueEx(hKey, "ProcessorNameString", NULL, &dwRegSz, (LPBYTE)szCPUName, &dwLenth); printf("CPU[%d]名称: %s@ %dMHz ", szCPUKey[0x2d]-48, szCPUName, dwFrequence); RegCloseKey(hKey); // 用了要还 } printf("内存容量: %dMB, 剩余: %dMB ", MemInfo.dwTotalPhys/1024/1024, MemInfo.dwAvailPhys/1024/1024); printf("分辨率: %dx%d@ %dHz, %dBit ", xScrn, yScrn, Hz, Bit); //printf("当前用户: %s ", CurrentUserName); } void DriverInfo() ...{ char Disk[] = "B:"; char VolName[MAX_PATH]; char FileSystem[MAX_PATH]; char DeviceName[MAX_PATH]; unsigned __int64 Amount; unsigned __int64 FreeSpace; unsigned __int64 HDAmount = 0; unsigned __int64 HDFreeSpace = 0; float Percent; printf(" 盘符[卷标] 驱动器[文件系统] 总大小 可用空间 百分比 "); //SetTextColor(TXT_BWHITE); printf("============================================================================== "); //SetTextColor(TXT_NORM); for(; Disk[0]<='Z'; Disk[0]++) ...{ Amount = 0; FreeSpace = 0; FileSystem[0] =0; VolName[0] = 0; //清空缓存 :-P GetVolumeInformation(Disk, VolName, MAX_PATH, NULL, NULL, NULL, FileSystem, MAX_PATH); GetDiskFreeSpaceEx(Disk, (PULARGE_INTEGER)&FreeSpace, (PULARGE_INTEGER)&Amount, NULL); unsigned long AmntMB = Amount/1024/1024; float AmntGB = AmntMB/1024.; unsigned long FreeMB = FreeSpace/1024/1024; float FreeGB = FreeMB/1024.; if( AmntMB == 0) ...{ Percent = 0.0; } else ...{ Percent = (float)FreeMB/(float)AmntMB*100.0; } switch(GetDriveType(Disk)) ...{ case DRIVE_REMOVABLE: strcpy(DeviceName, "可移动磁盘"); break; case DRIVE_FIXED: strcpy(DeviceName, " 硬盘"); HDAmount = HDAmount + Amount; HDFreeSpace = HDFreeSpace + FreeSpace; break; case DRIVE_REMOTE: strcpy(DeviceName, "网络驱动器"); break; case DRIVE_CDROM: if ( FileSystem[0] == 0&& VolName[0] == 0) strcpy(FileSystem, "无盘"); strcpy(DeviceName, " 光驱"); break; case DRIVE_RAMDISK: strcpy(DeviceName, " RAM驱动器"); break; case DRIVE_UNKNOWN: strcpy(DeviceName, " 未知设备"); break; default: strcpy(DeviceName, "其他情况"); break; } if ( strcmp(DeviceName, "其他情况")) ...{ printf("%s[%-8s] %s|%4s %8ldMB|%6.1fG %8ldMB|%6.1fG %2.1f%% ", Disk, VolName, DeviceName, FileSystem, AmntMB, AmntGB, FreeMB, FreeGB, Percent); } } //for()循环的 unsigned long HDAmntMB = HDAmount/1024/1024; float HDAmntGB = HDAmntMB/1024.; unsigned long HDFreeMB = HDFreeSpace/1024/1024; float HDFreeGB = HDFreeMB/1024.; if( HDAmntMB == 0) ...{ Percent = 0.0; } else ...{ Percent = (float)HDFreeMB/(float)HDAmntMB*100.0; } printf(" 硬盘总大小: %8ldMB|%6.1fG 剩余空间: %8ldMB|%6.1fG 可用率百分比: %2.1f%% ", HDAmntMB, HDAmntGB, HDFreeMB, HDFreeGB, Percent); } BOOL SetTextColor(int color) ...{ switch(color) ...{ case TXT_NORM: return SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); case TXT_BRED: return SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED| FOREGROUND_INTENSITY); case TXT_BGREEN: return SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN| FOREGROUND_INTENSITY); case TXT_BBLUE: return SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE| FOREGROUND_INTENSITY); case TXT_BWHITE: return SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); default: return FALSE; } }