看了杨中科老师的《C语言也能干大事》中的自己动手开发Windows优化大师后有了写自己的优化大师的冲动,使用如鹏网的开发向导可以很轻松地搭建成如下图所示的图形界面
程序主模块:
系统信息模块
内存状态模块
硬盘信息模块
函数模块
函数名 |
函数功能 |
Get_User_Name( |
得到用户名 |
Get_Computer_Name |
得到计算机名 |
Get_System_Version |
得到系统版本 |
TimerProc |
回调函数(用于得到系统时间) |
Get_Time |
得到系统的运行时间 |
GetTime |
回调函数(用于得到系统的时间) |
Get_Memory |
得到内存信息 |
Show |
得到磁盘的盘符 |
Get_Type |
得到磁盘的类型 |
Get_Dist_Space |
得到磁盘空间 |
Get_Dist_Infro |
得到磁盘信息 |
程序代码:
#include "stdafx.h" #include <windows.h> #include <windowsx.h> #include <WinBase.h> #include <math.h> #include "resource.h" #include "MainDlg.h" BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*得到用户名*/ void Get_User_Name(HWND hwnd) { TCHAR buffer[256]; DWORD dwRct = sizeof(buffer) / sizeof(TCHAR); ZeroMemory(buffer, sizeof(buffer) / sizeof(TCHAR)); /*得到用户名*/ GetUserName(buffer, &dwRct); SetDlgItemText(hwnd, IDC_EDIT1, buffer); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*得到计算机名*/ void Get_Computer_Name(HWND hwnd) { TCHAR buffer[256]; DWORD dwRct = sizeof(buffer) / sizeof(TCHAR); ZeroMemory(buffer, sizeof(buffer) / sizeof(TCHAR)); /*得到计算机名*/ GetComputerName(buffer, &dwRct); SetDlgItemText(hwnd, IDC_EDIT2, buffer); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*用于保存操作系统的版本*/ TCHAR *strOsVersion; /*得到系统的版本*/ void Get_System_Version(HWND hwnd) { /*操作系统版本信息结构*/ OSVERSIONINFO osvi; /*清零*/ ZeroMemory(&osvi, sizeof(osvi)); /*得到操作系统版本信息的大小*/ osvi.dwOSVersionInfoSize = sizeof(osvi); /*得到系统的版本*/ GetVersionEx(&osvi); /*操作系统的构架*/ switch (osvi.dwPlatformId) { /*NT架构*/ case VER_PLATFORM_WIN32_NT: { /*主版本号*/ /*副版本号*/ if ( 5 == osvi.dwMajorVersion && 0 == osvi.dwMinorVersion) { SetDlgItemText(hwnd, IDC_EDIT3, TEXT("Windows 2000")); } else if ( 5 == osvi.dwMajorVersion && 1 == osvi.dwMinorVersion) { SetDlgItemText(hwnd, IDC_EDIT3, TEXT("Windows XP")); } else if(6 == osvi.dwMajorVersion && 0 == osvi.dwMinorVersion) { SetDlgItemText(hwnd, IDC_EDIT3, TEXT("Windows Vista")); } else if ( 4 == osvi.dwMajorVersion && 0 == osvi.dwMinorVersion) { SetDlgItemText(hwnd, IDC_EDIT3, TEXT("Windows NT")); } else if (6 == osvi.dwMajorVersion && 1 == osvi.dwMinorVersion) { SetDlgItemText(hwnd, IDC_EDIT3, TEXT("Windows 7")); } } break; /*旧架构*/ case VER_PLATFORM_WIN32_WINDOWS: { if (osvi.dwMajorVersion == 4&&osvi.dwMinorVersion == 10) { SetDlgItemText(hwnd, IDC_EDIT3, TEXT("Windows 98")); } else if (osvi.dwMajorVersion == 4&&osvi.dwMinorVersion == 90) { SetDlgItemText(hwnd, IDC_EDIT3, TEXT("Windows ME")); } else { SetDlgItemText(hwnd, IDC_EDIT3, TEXT("Windows 95")); } } break; default: break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*用于得到系统时间*/ void CALLBACK TimerProc(HWND hwnd, UINT message,UINT iTimerID, DWORD dwTime) { SYSTEMTIME stLock; /*时间结构*/ /*得到系统时间*/ GetLocalTime(&stLock); TCHAR Time[256]; wsprintf(Time, "%04d年%02d月%02d日%02d:%02d:%02d", stLock.wYear, stLock.wMonth, stLock.wDay, stLock.wHour, stLock.wMinute, stLock.wSecond); SetDlgItemText(hwnd, IDC_EDIT4, Time); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*得到系统的运行时间*/ void Get_Time(HWND hwnd) { /*得到系统自启动以来的毫秒数*/ DWORD dwStart = GetTickCount(); TCHAR buffer[256]; /*时*/ DWORD Hour = (dwStart / 1000) / 3600; /*分*/ DWORD Minute = ((dwStart / 1000) % 3600) / 60; /*秒*/ DWORD Second = ((dwStart / 1000) % 3600) % 60; /*系统运行时间*/ wsprintf(buffer, "%02d:%02d:%02d", Hour, Minute, Second); /*显示系统运行时间*/ SetDlgItemText(hwnd, IDC_EDIT6, buffer); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*用于得到系统启动时间*/ void CALLBACK GetTime(HWND hwnd, UINT message,UINT iTimerID, DWORD dwTime) { /*时间结构*/ SYSTEMTIME stLocal; /*得到系统时间*/ GetLocalTime(&stLocal); TCHAR Time[256]; /*当前的系统时间(秒)*/ int Local = stLocal.wHour * 3600 + stLocal.wMinute * 60 + stLocal.wSecond; /*得到系统自启动以来的毫秒数*/ DWORD dwStart = GetTickCount(); /*系统启动时的时间(秒)*/ DWORD dwSecond = dwStart / 1000; /*系统启动时的时间(秒)*/ int Move = Local - dwSecond; /*系统启动时的时间:时*/ int Hour = Move / 3600; /*系统启动时的时间:分*/ int Minute = (Move % 3600) / 60; /*系统启动时的时间:秒*/ int Second = (Move % 3600) % 60; wsprintf(Time, "%02d:%02d:%02d", Hour, Minute, Second); SetDlgItemText(hwnd, IDC_EDIT5, Time); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*得到内存*/ void Get_Memory(HWND hwnd) { /*内存结构*/ MEMORYSTATUS memStatex; /*缓冲区大小*/ const int nBufSize = 512; /*声明字符缓冲区*/ TCHAR chBuf[nBufSize]; /*调用得到内存信息的函数*/ GlobalMemoryStatus(&memStatex); /*清零*/ ZeroMemory(chBuf,nBufSize); /*总物理内存大小*/ wsprintf(chBuf, TEXT("%dM"), memStatex.dwTotalPhys / (1024 * 1024)); SetDlgItemText(hwnd, IDC_EDIT7, chBuf); /*物理内存使用率*/ wsprintf(chBuf, TEXT("%d%%"), memStatex.dwMemoryLoad); SetDlgItemText(hwnd, IDC_EDIT8, chBuf); /*虚拟内存大小*/ wsprintf(chBuf, TEXT ("%dM"), memStatex.dwTotalVirtual / (1024 * 1024)); SetDlgItemText(hwnd, IDC_EDIT9, chBuf); /*可用的物理内存*/ wsprintf(chBuf, TEXT ("%dM"),memStatex.dwAvailPhys / (1024 * 1024)); SetDlgItemText(hwnd, IDC_EDIT11, chBuf); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*得到磁盘符号*/ void Show(HWND hwnd) { DWORD d = GetLogicalDrives(); TCHAR temp[5];/*临时储存逻辑磁盘符号*/ TCHAR str[10];/*储存逻辑磁盘符号*/ int count = 0;/*计数*/ ZeroMemory(temp, sizeof(temp) / sizeof(TCHAR)); ZeroMemory(str, sizeof(str) / sizeof(TCHAR)); /*对字符串清零*/ ZeroMemory(str, sizeof(str)); while(d > 0) { if((d & 1) > 0) { /*字符赋值*/ temp[0] = 'A' + count; /*字符串连接*/ strcat(str,temp); /*字符串清零*/ ZeroMemory(temp, sizeof(temp) / sizeof(TCHAR)); } /*向右移一位*/ d >>= 1; /*计数*/ count++; } /*输出磁盘符号*/ SetDlgItemText(hwnd, IDC_EDIT10, str); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*得到磁盘的类型*/ void Get_Type(LPSTR Name , LPSTR Type) { /*t用于判断磁盘的类型*/ UINT t = GetDriveType(Name); switch (t) { case DRIVE_UNKNOWN: { wsprintf(Type, "%24s", TEXT("未知磁盘类型")); } break; case DRIVE_NO_ROOT_DIR: { wsprintf(Type, "%24s", TEXT("磁盘名无效")); } break; case DRIVE_REMOVABLE: { wsprintf(Type, "%24s", TEXT("可移动磁盘")); } break; case DRIVE_FIXED: { wsprintf(Type, "%24s", TEXT("固定磁盘")); } break; case DRIVE_REMOTE: { wsprintf(Type, "%24s, "TEXT("网络磁盘")); } break; case DRIVE_CDROM: { wsprintf(Type, "%24s", TEXT("光驱")); } break; case DRIVE_RAMDISK: { wsprintf(Type, "%24s", TEXT("RAN")); } break; default: { wsprintf(Type, "%24s", TEXT("GetDriveType的返回值非法")); } } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //得到硬盘的空间 void Get_Dist_Space(LPSTR Name, LPSTR Space) { ULARGE_INTEGER A;/*磁盘的总空间*/ ULARGE_INTEGER B;/*磁盘的可用空间*/ ULARGE_INTEGER C;/*磁盘的空闲空间*/ if ( 0 != GetDiskFreeSpaceEx(Name, &B, &A, &C)) { double i1 = ( (double)A.HighPart * pow(2,32) + (double)A.LowPart ) / Memory;/*磁盘的总空间*/ double i2 = ( (double)B.HighPart * pow(2,32) + (double)B.LowPart ) / Memory;/*磁盘的可用空间*/ double i3 = ( (double)C.HighPart * pow(2,32) + (double)C.LowPart ) / Memory;/*磁盘的空闲空间*/ TCHAR str1[10];/*磁盘的总空间*/ TCHAR str2[10];/*磁盘可用空间*/ TCHAR str3[10];/*磁盘空闲空间*/ gcvt(i1, 3, str1); gcvt(i2, 3, str2); gcvt(i3, 3, str3); wsprintf(Space, "%15sG %12sG %12sG", str1, str2, str3); } } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*得到磁盘的信息*/ void Get_Dist_Infro(HWND hwnd) { /*得到计算机中存在的磁盘*/ DWORD d = GetLogicalDrives(); TCHAR str[256];/*储存逻辑磁盘符号*/ int count = 0;/*计数*/ /*清零*/ ZeroMemory(str, sizeof(str) / sizeof(TCHAR)); /*得到ListBox控件的句柄*/ HWND hwndList = GetDlgItem(hwnd, IDC_LIST2); /*保存磁盘的类型*/ TCHAR Type[256]; TCHAR Space[256]; /*清零*/ ZeroMemory(Type, sizeof(Type) / sizeof(TCHAR)); while(d > 0) { if((d & 1) > 0) { /*字符赋值*/ *str = 'A' + count; /*连接磁盘符号和:*/ lstrcat(str, ":"); /*得到磁盘的类型*/ Get_Type(str, Type); Get_Dist_Space(str, Space); /*连接磁盘符号和磁盘类型*/ lstrcat(str, Type); lstrcat(str, Space); /*列表显示磁盘的信息*/ ListBox_AddString(hwndList, str); /*字符串清零*/ ZeroMemory(str, sizeof(str) / sizeof(TCHAR)); } /*向右移一位*/ d >>= 1; /*计数*/ count++; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { /*得到用户名*/ Get_User_Name(hwnd); /*得到计算机名*/ Get_Computer_Name(hwnd); /*得到系统的版本*/ Get_System_Version(hwnd); /*调用定时器的到系统时间*/ SetTimer(hwnd, 0, 1000, TimerProc); /*得到系统的启动时间*/ Get_Time(hwnd); /*得到系统启动时间*/ SetTimer(hwnd, 1, 1000, GetTime); /*得到内存*/ Get_Memory(hwnd); /*得到磁盘符号*/ Show(hwnd); /*得到磁盘的信息*/ Get_Dist_Infro(hwnd); return TRUE; } void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDC_OK: { } break; default: break; } } void Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); }
执行结果:(得到的是测试程序的计算机中的信息)