Windows优化大师

来源:互联网 发布:淘宝重复开店不查了 编辑:程序博客网 时间:2024/05/01 02:09

看了杨中科老师的《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);}


执行结果:(得到的是测试程序的计算机中的信息)


点击此处下载Windows优化大师


0 0
原创粉丝点击