首页 > 代码库 > Windows优化大师

Windows优化大师

看了杨中科老师的《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优化大师