#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;
}
}
#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;
}
}