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

HardwareInfo.h

 #include <stdio.h>
#include <windows.h>
#include <vfw.h> #pragma comment(lib,"Vfw32.lib")
#pragma comment(lib,"winmm.lib")
#ifndef VER_NT_WORKSTATION
#define VER_NT_WORKSTATION 1
#endif /*
// vc6.0需定义
typedef struct _MEMORYSTATUSEX {
DWORD dwLength; // 结构体数据大小 sizeof(_MEMORYSTATUSEX)
DWORD dwMemoryLoad; // 内存使用率
LONGLONG ullTotalPhys; // 物理内存总大小(单位:字节)
LONGLONG ullAvailPhys; // 物理内存可用大小(单位:字节)
LONGLONG ullTotalPageFile; // 总页面大小(物理内存总大小+硬盘划分的虚拟内存总大小)(单位:字节)
LONGLONG ullAvailPageFile; // 当前进程能获取的最大内存数(单位:字节)
LONGLONG ullTotalVirtual; // 当前进程最大内存寻址地址(默认2GB,开启大地址后就是4GB)
LONGLONG ullAvailVirtual; // 当前进程可用最大内存(单位:字节)
LONGLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
*/
typedef struct _OSVERSIONINFOEXA1 {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
CHAR szCSDVersion[];
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wSuiteMask;
BYTE wProductType;
BYTE wReserved;
} OSVERSIONINFOEXA1, *POSVERSIONINFOEXA1, *LPOSVERSIONINFOEXA1; /*
屏幕截图
lpData:存放截图数据指针
hWnd :目标窗口,默认为桌面
成功返回截图数据大小,失败返回0.
*/
DWORD PrtScr(PCHAR *lpData, HWND hWnd = ); /*
是否有摄像头
有摄像头返回TRUE,否则返回FALSE
*/
BOOL HaveCameras(void); /*
获取CPU名称
成功返回CPU名称,失败返回NULL(VS2013不支持Debug模式下获取)
*/
LPSTR GetCPUName(void); /*
获取CPU制造商
成功返回CPU制造商,失败返回NULL(VS2013不支持Debug模式下获取)
*/
LPSTR GetCPUManufacturer(void); /*
获取声卡名字
成功返回声卡名字,失败返回NULL
*/
LPSTR GetSoundCarName(void); /*
获取磁盘容量信息
diskPath:盘符
used:已用空间
freed:剩余空间
total:总空间
成功返回TRUE,失败返回FALSE
*/
BOOL GetDiskSpaceInfo(LPSTR diskPath, float *used, float *freed, float *total); /*
获取运行内存总额
返回运存总额
*/
FLOAT GetSysRam(void); /*
获取运存已用比例
返回运存已用比例
*/
DWORD GetRamProportion(void); /*
获取系统启动时间
返回格式化文本字符串
*/
LPSTR GetSysStartTime(void); /*
获取系统信息
dwMajor:高版本位
dwMinjor:低版本位
bDesc:是否获取系统描述
bBit:是否获取位数
bSPVer:是否获取系统补丁包版本
bBuildVer:是否获取内部版本
成功返回系统信息字符串,失败返回NULL
*/
LPSTR GetSysInfo(DWORD *dwMajor = NULL, DWORD *dwMinjor = NULL, BOOL bDesc = FALSE, BOOL bBit = FALSE, BOOL bSPVer = FALSE, BOOL bBuildVer = FALSE);

HardwareInfo.cpp

 #include "HardwareInfo.h"

 int main(void)
{ LPSTR lpCPUName = GetCPUName();
LPSTR lpCPUManu = GetCPUManufacturer();
LPSTR lpSoundCarName = GetSoundCarName();
printf("处理器: %s\n\n", lpCPUName);
printf("CPU制造商: %s\n\n", lpCPUManu);
printf("声卡: %s\n\n", lpSoundCarName);
float used, usable, total;
GetDiskSpaceInfo("D:", &used, &usable, &total);
printf("D盘 已用: %.1fG, 可用:%.1fG, 总大小:%.1fG\n\n", used, usable, total);
printf("运行内存: %.1fG, 已用%d%%\n\n", GetSysRam(), GetRamProportion());
LPSTR lpStartTime = GetSysStartTime();
printf("已开机: %s\n\n", GetSysStartTime());
LPSTR lpSysVer = GetSysInfo(, , , , );
printf("系统版本: %s\n\n", lpSysVer);
free(lpCPUName);
free(lpCPUManu);
free(lpSoundCarName);
free(lpStartTime);
free(lpSysVer); Sleep();
DWORD dwLen = ;
char *lpData = NULL; dwLen = PrtScr(&lpData);
FILE *wj = NULL;
fopen_s(&wj, "c:\\1.bmp", "wb");
fwrite(lpData, dwLen, , wj);
fclose(wj);
free(lpData);
system("c:\\1.bmp");
system("pause");
return ;
} DWORD PrtScr(PCHAR *lpData, HWND hWnd)
{
HDC hdcScreen, hdcMem;
RECT rc = { }, desRc = { };
HBITMAP hbmScreen = NULL;
BITMAP bmpScreen = { };
BITMAPINFOHEADER bitInfo = { };
BITMAPFILEHEADER bitHead = { };
DWORD dwBmpSize, dwSizeofDIB;
char *lpbitmap = NULL;
int width, height; if (!hWnd)
hWnd = GetDesktopWindow();
GetWindowRect(hWnd, &rc);
GetWindowRect(GetDesktopWindow(), &desRc); hdcScreen = GetDC(NULL);
hdcMem = CreateCompatibleDC(hdcScreen);
if (!hdcMem)
return ;
hbmScreen = CreateCompatibleBitmap(hdcScreen, rc.right - rc.left, rc.bottom - rc.top);
if (!hbmScreen)
return ;
SelectObject(hdcMem, hbmScreen);
width = (rc.right > desRc.right) ? (desRc.right - rc.left) : (rc.right - rc.left);
height = (rc.bottom > desRc.bottom) ? (desRc.bottom - rc.top) : (rc.bottom - rc.top);
if (!BitBlt(hdcMem, , , width, height, hdcScreen, rc.left, rc.top, SRCCOPY))
return ;
GetObject(hbmScreen, sizeof(BITMAP), &bmpScreen); bitInfo.biSize = sizeof(BITMAPINFOHEADER);
bitInfo.biWidth = width;
bitInfo.biHeight = height;
bitInfo.biPlanes = ;
bitInfo.biBitCount = ;
bitInfo.biCompression = BI_RGB; dwBmpSize = ((bmpScreen.bmWidth * bitInfo.biBitCount + ) / ) * * bmpScreen.bmHeight;
lpbitmap = (char *)malloc(dwBmpSize);
if (!lpbitmap)
return ;
GetDIBits(hdcScreen, hbmScreen, , (UINT)bmpScreen.bmHeight, lpbitmap, (BITMAPINFO *)&bitInfo, DIB_RGB_COLORS); dwSizeofDIB = dwBmpSize + sizeof(bitHead)+sizeof(bitInfo);
bitHead.bfOffBits = (DWORD)sizeof(bitHead)+(DWORD)sizeof(bitInfo);
bitHead.bfSize = dwSizeofDIB;
// 必须是字符BM或者十六进制代替0x4D42="BM"
bitHead.bfType = MAKEWORD('B', 'M'); *lpData = (char *)malloc(dwSizeofDIB);
if (!*lpData)
return ;
memmove(*lpData, &bitHead, sizeof(bitHead));
memmove(*lpData + sizeof(bitHead), &bitInfo, sizeof(bitInfo));
memmove(*lpData + sizeof(bitHead)+sizeof(bitInfo), lpbitmap, dwBmpSize);
free(lpbitmap);
DeleteObject(hbmScreen);
DeleteObject(hdcMem);
ReleaseDC(NULL, hdcScreen);
return dwSizeofDIB;
} BOOL HaveCameras(void)
{
char ver[] = { }, name[] = { };
UINT num = ; do
{
memset(name, , );
if (capGetDriverDescription(num, name, , ver, ))
{
num++;
}
} while (lstrlen(name));
return (num ? TRUE : FALSE);
} LPSTR GetCPUName(void)
{
LPSTR lpName = (LPSTR)malloc();
memset(lpName, , ); __asm{
PUSHAD
MOV EAX, 0x80000002
CPUID
MOV ESI, [EBP - 0x4]
MOV SS : [ESI], EAX
MOV SS : [ESI + 0x4], EBX
MOV SS : [ESI + 0x8], ECX
MOV SS : [ESI + 0xC], EDX
MOV EAX, 0x80000003
CPUID
MOV SS : [ESI + 0x10], EAX
MOV SS : [ESI + 0x14], EBX
MOV SS : [ESI + 0x18], ECX
MOV SS : [ESI + 0x1C], EDX
MOV EAX, 0x80000004
CPUID
MOV SS : [ESI + 0x20], EAX
MOV SS : [ESI + 0x24], EBX
MOV SS : [ESI + 0x28], ECX
MOV SS : [ESI + 0x2C], EDX
POPAD
}
return lpName;
} LPSTR GetCPUManufacturer(void)
{
LPSTR lpStr = (LPSTR)malloc();
memset(lpStr, , ); __asm{
PUSHAD
XOR EAX, EAX
CPUID
MOV EAX, DWORD PTR SS : [EBP - 0x4]
MOV DWORD PTR SS : [EAX], EBX
MOV DWORD PTR SS : [EAX + 0x4], EDX
MOV DWORD PTR SS : [EAX + 0x8], ECX
POPAD
} if (!lstrcmp("GenuineIntel", lpStr))
memmove(lpStr, "Intel Corporation.", );
else if (!lstrcmp("AuthenticAMD", lpStr))
memmove(lpStr, "Advanced Micro Devices.", );
else if (!lstrcmp("AMD ISBETTER", lpStr))
memmove(lpStr, "Advanced Micro Devices.", );
else if (!lstrcmp("Geode By NSC", lpStr))
memmove(lpStr, "National Semiconductor.", );
else if (!lstrcmp("CyrixInstead", lpStr))
memmove(lpStr, "Cyrix Corp., VIA Inc.", );
else if (!lstrcmp("NexGenDriven", lpStr))
memmove(lpStr, "NexGen Inc., Advanced Micro Devices.", );
else if (!lstrcmp("CentaurHauls", lpStr))
memmove(lpStr, "IDT\\Centaur, Via Inc.", );
else if (!lstrcmp("UMC UMC UMC ", lpStr))
memmove(lpStr, "United Microelectronics Corp.", );
else if (!lstrcmp("RiseRiseRise", lpStr))
memmove(lpStr, "Rise.", );
else if (!lstrcmp("GenuineTMx86", lpStr))
memmove(lpStr, "Transmeta.", );
else if (!lstrcmp("TransmetaCPU", lpStr))
memmove(lpStr, "Transmeta.", );
else
memmove(lpStr, "Unknown Manufacturer.", ); return lpStr;
} LPSTR GetSoundCarName(void)
{
WAVEOUTCAPS wav = { };
LPSTR lpName = (LPSTR)malloc(); waveOutGetDevCaps(, &wav, sizeof(wav)); // 有点电脑获取的数据不完整,缺失 " Audio)",为了美观获取不到的手动加入
if (wav.szPname[lstrlen(wav.szPname)-] != ')')
sprintf_s(lpName, , "%s Audio)", wav.szPname);
else
sprintf_s(lpName, , "%s", wav.szPname);
return lpName;
} BOOL GetDiskSpaceInfo(LPSTR diskPath, float *used, float *freed, float *total)
{
ULARGE_INTEGER a1, b1, c1;
LONGLONG a, b, c;
float v1, v2, v3;
if (!GetDiskFreeSpaceEx(diskPath, &a1, &b1, &c1))
return FALSE; a = (LONGLONG)a1.QuadPart;
b = (LONGLONG)b1.QuadPart;
c = (LONGLONG)c1.QuadPart;
c = b - a; v1 = (float)(a / ( * * 1024.0));
v2 = (float)(b / ( * * 1024.0));
v3 = (float)(c / ( * * 1024.0)); memmove(used, &v3, sizeof(float));
memmove(freed, &v1, sizeof(float));
memmove(total, &v2, sizeof(float)); return TRUE;
} FLOAT GetSysRam(void)
{
typedef BOOL(WINAPI *func)(LPMEMORYSTATUSEX);
MEMORYSTATUSEX stMem = { }; func GlobalMemoryStatusEx = (func)GetProcAddress(LoadLibrary("Kernel32.dll"), "GlobalMemoryStatusEx");
stMem.dwLength = sizeof(stMem);
GlobalMemoryStatusEx(&stMem);
return (FLOAT)(stMem.ullTotalPhys / ( * * 1024.0));
} DWORD GetRamProportion(void)
{
typedef BOOL(WINAPI *func)(LPMEMORYSTATUSEX);
MEMORYSTATUSEX stMem = { }; func GlobalMemoryStatusEx = (func)GetProcAddress(LoadLibrary("Kernel32.dll"), "GlobalMemoryStatusEx");
stMem.dwLength = sizeof(stMem);
GlobalMemoryStatusEx(&stMem);
return stMem.dwMemoryLoad;
} LPSTR GetSysStartTime(void)
{
LPSTR lpStr = (LPSTR)malloc(sizeof(char)* );
DWORD dwStart = GetTickCount();
DWORD day, hou, min, sec; day = dwStart / ( * * * );
hou = dwStart / ( * * ) - day * ;
min = dwStart / ( * ) - day * * - hou * ;
sec = dwStart / () - day * * * - hou * * - min * ; sprintf_s(lpStr, , "%d天%d小时%d分钟%d秒", day, hou, min, sec);
return lpStr;
} LPSTR GetSysInfo(DWORD *dwMajor, DWORD *dwMinjor, BOOL bDesc, BOOL bBit, BOOL bSPVer, BOOL bBuildVer)
{
OSVERSIONINFOEXA1 osvi = { };
SYSTEM_INFO si = { };
BOOL bWow64 = FALSE;
DWORD dwType = , dwBuild = ;
char strSys[] = { }, strVer[] = { }; osvi.dwOSVersionInfoSize = sizeof(osvi);
typedef BOOL(WINAPI *fun)(LPOSVERSIONINFOEXA1);
fun GetVersionEx1 = (fun)GetProcAddress(LoadLibrary("Kernel32.dll"), "GetVersionExA");
if (GetVersionEx1(&osvi))
{
dwBuild = osvi.dwBuildNumber;
GetSystemInfo(&si); typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS IsWow64Process1 = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle("kernel32"), "IsWow64Process");
IsWow64Process1((void *)-, &bWow64); typedef void (WINAPI *func)(DWORD *, DWORD *, DWORD *);
func RtlGetNtVersionNumbers = (func)GetProcAddress(LoadLibrary("ntdll.dll"), "RtlGetNtVersionNumbers");
RtlGetNtVersionNumbers(&osvi.dwMajorVersion, &osvi.dwMinorVersion, &osvi.dwBuildNumber); if (dwMajor)
*dwMajor = osvi.dwMajorVersion;
if (dwMinjor)
*dwMinjor = osvi.dwMinorVersion; if (osvi.dwMajorVersion == )
{
if (osvi.dwMinorVersion == )
{
lstrcpyn(strSys, (osvi.wProductType == VER_NT_WORKSTATION ? "Windows 10" : "Windows Server 2016"), );
}
}
else if (osvi.dwMajorVersion == )
{
if (osvi.dwMinorVersion == )
{
lstrcpyn(strSys, (osvi.wProductType == VER_NT_WORKSTATION ? "Windows Vista" : "Windows Server 2008"), );
}
else if (osvi.dwMinorVersion == )
{
lstrcpyn(strSys, (osvi.wProductType == VER_NT_WORKSTATION ? "Windows 7" : "Windows Server 2008 R2"), );
}
else if (osvi.dwMinorVersion == )
{
lstrcpyn(strSys, (osvi.wProductType == VER_NT_WORKSTATION ? "Windows 8" : "Windows Server 2012"), );
}
else if (osvi.dwMinorVersion == )
{
lstrcpyn(strSys, (osvi.wProductType == VER_NT_WORKSTATION ? "Windows 8.1" : "Windows Server 2012 R2"), );
}
}
else if (osvi.dwMajorVersion == && osvi.dwMinorVersion == )
{
lstrcpyn(strSys, "Windows 2000", );
if (osvi.wProductType == )
{
lstrcpyn(strVer, "Professional", );
}
else if ((osvi.wSuiteMask & ) == )
{
lstrcpyn(strVer, "Datacenter Server", );
}
else if ((osvi.wSuiteMask & ) == )
{
lstrcpyn(strVer, "Advanced Server", );
}
else
{
lstrcpyn(strVer, "Server", );
}
}
else if (osvi.dwMajorVersion == && osvi.dwMinorVersion == )
{
lstrcpyn(strSys, "Windows XP", );
if ((osvi.wSuiteMask & ) == )
{
lstrcpyn(strVer, "Home Edition", ); // 家庭版
}
else
{
lstrcpyn(strVer, "Professional", ); // 专业版
}
}
else if (osvi.dwMajorVersion == && osvi.dwMinorVersion == )
{
if (GetSystemMetrics() != )
{
lstrcpyn(strSys, "Windows Server 2003 R2, ", );
}
else if ((osvi.wSuiteMask & ) == )
{
lstrcpyn(strSys, "Windows Storage Server 2003", );
}
else if ((osvi.wSuiteMask & ) == )
{
lstrcpyn(strSys, "Windows Home Server", );
}
else if (osvi.wProductType == && si.wProcessorArchitecture == )
{
lstrcpyn(strSys, "Windows XP Professional x64 Edition", ); // XP专业版64位系统
}
else
{
lstrcpyn(strSys, "Windows Server 2003, ", );
}
}
else if (osvi.dwMajorVersion == && osvi.dwMinorVersion == )
{
lstrcpyn(strSys, "Windows 98", );
}
else if (osvi.dwMajorVersion >= )
{
typedef BOOL(WINAPI *pGetProductInfo)(DWORD, DWORD, DWORD, DWORD, PDWORD);
pGetProductInfo RtlGetProductInfo = (pGetProductInfo)GetProcAddress(LoadLibrary("Kernel32.dll"), "RtlGetProductInfo");
RtlGetProductInfo(osvi.dwMajorVersion, osvi.dwMinorVersion, , , &dwType); switch (dwType)
{
case : // 旗舰版
lstrcpyn(strVer, "Ultimate Edition", );
break;
case : // 家庭普通版
lstrcpyn(strVer, "Home Basic Edition", );
break;
case : // 家庭高级版
lstrcpyn(strVer, "Home Premiu Edition", );
break;
case : // 企业版
lstrcpyn(strVer, "Enterprise Edition", );
break;
case : // 商业版
lstrcpyn(strVer, "Business Edition", );
break;
case : // 服务器标准版
lstrcpyn(strVer, "Standard", );
break;
case : // 服务器企业版
lstrcpyn(strVer, "Datacenter Edition", );
break;
case : // 小型服务器
lstrcpyn(strVer, "Small Business Server", );
break;
case : // 服务器企业版(完整的安装)
lstrcpyn(strVer, "Enterprise Edition", );
break;
case : // 入门版
lstrcpyn(strVer, "Starter Edition", );
break;
case : // 服务器数据中心版(核心安装)
lstrcpyn(strVer, "Datacenter Edition (core installation)", );
break;
case : // 服务器标准版(核心安装)
lstrcpyn(strVer, "Standard Edition (core installation)", );
break;
case : // 服务器企业版(核心安装)
lstrcpyn(strVer, "Enterprise Edition (core installation)", );
break;
case : // 一个企业级的平台
lstrcpyn(strVer, "Enterprise Edition for Itanium-based Systems", );
break;
case : // 商用公司版
lstrcpyn(strVer, "Business N", );
break;
case : // Web服务器(完整安装)
lstrcpyn(strVer, "Web Server (full installation)", );
break;
case : // 服务器群集版
lstrcpyn(strVer, "HPC Edition", );
break;
case : // 2008 R2 储存服务器版
lstrcpyn(strVer, "Windows Storage Server 2008 R2 Essentials", );
break;
case : // 服务器快速储存版
lstrcpyn(strVer, "Storage Server Express", );
break;
case : // 服务器标准储存版
lstrcpyn(strVer, "Storage Server Standard", );
break;
case : // 服务器储存组
lstrcpyn(strVer, "Storage Server Workgroup", );
break;
case : // 服务器储存企业版
lstrcpyn(strVer, "Storage Server Enterprise", );
break;
case : // 小型商业服务器
lstrcpyn(strVer, "Small Business Server Premium Edition", );
break;
case : // 专业版
lstrcpyn(strVer, "Professional", );
break;
}
}
}
if (lstrlen(strSys) < )
{
sprintf_s(strSys, , "获取失败,请检查版本:%d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);
return NULL;
}
else
{
LPSTR lpStr = (LPSTR)malloc(sizeof(char)* ); lstrcpyn(lpStr, strSys, lstrlenA(strSys) + );
if (bDesc)
{
lstrcatA(lpStr, " ");
lstrcatA(lpStr, strVer);
}
if (bBit)
lstrcatA(lpStr, (bWow64 ? " x64 " : " x86 "));
if (bSPVer)
lstrcatA(lpStr, (LPCSTR)&osvi.szCSDVersion);
if (bBuildVer)
sprintf_s(lpStr,, "%s,Build:%d", lpStr, dwBuild);
return lpStr;
}
return NULL;
}

 效果图

最新文章

  1. R in a nutshell(连载)
  2. [No000058]一口气读完一本英语书
  3. 【云计算】Netflix 开源持续交付平台 Spinnaker
  4. Titan-红号楼宗谱案例
  5. Esfog_UnityShader教程_漫反射DiffuseReflection
  6. EL函数
  7. 让SecureCRT vi中显示多色彩
  8. 食品药检所LIMS需求分析说明书
  9. PAT---1013. Battle Over Cities (25)
  10. ZeroBraneStudio之支持GBK文件编码
  11. 对163k地方门户网站系统QQ互联功能修改
  12. jQuery 事件 - error() 方法
  13. iOS开发之自己封装一个progressHUD控件
  14. js中把ajax获取的数据转化成树状结构(并做成多级联动效果)
  15. taro 报错及解决
  16. Jquery hover方法使用及 mouseenter与mouseleave和 mouseover与mouseout的区别
  17. 用js互相调用iframe页面内的js函数
  18. JAXBContext处理CDATA
  19. grep和rgrep和fgrep
  20. 阿里云CentOS7挂载SSD云盘的方法

热门文章

  1. javaSystem.out.println()输出byte[]和char[]异常的问题
  2. jQuery Custom PopUp Window
  3. python函数名称空间与作用域、闭包
  4. Jcrontab定时任务
  5. java面试题之----数据库事务的四大特性及隔离级别
  6. 一个简单的 HTML 文档,带有最基本的必需的元素
  7. 安装字体或直接调用非注册字体 z
  8. laravel5.4学习笔记
  9. 深度剖析hdfs原理
  10. [libxml2]_[XML处理]_[使用libxml2的xpath特性修改xml文件内容]