标签:style blog http color 使用 width
看了杨中科老师的《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
#include
#include
#include
#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优化大师
Windows优化大师,搜素材,soscw.com
Windows优化大师
标签:style blog http color 使用 width
原文地址:http://blog.csdn.net/u010105970/article/details/36886591