附上源码:
// Win32Project1.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "写你吗.h"
#include <strsafe.h>
#include <TlHelp32.h>
#include <windows.h>
#include <atlstr.h>
#define MAX_LOADSTRING 100
// 获得系统CPU使用率
class CCPUUseRate
{
public:
BOOL Initialize()
{
FILETIME ftIdle, ftKernel, ftUser;
BOOL flag = FALSE;
if (flag = GetSystemTimes(&ftIdle, &ftKernel, &ftUser))
{
m_fOldCPUIdleTime = FileTimeToDouble(ftIdle);
m_fOldCPUKernelTime = FileTimeToDouble(ftKernel);
m_fOldCPUUserTime = FileTimeToDouble(ftUser);
}
return flag;
}
//调用Initialize后要等待1秒再调用此函数
int GetCPUUseRate()
{
int nCPUUseRate = -1;
FILETIME ftIdle, ftKernel, ftUser;
if (GetSystemTimes(&ftIdle, &ftKernel, &ftUser))
{
double fCPUIdleTime = FileTimeToDouble(ftIdle);
double fCPUKernelTime = FileTimeToDouble(ftKernel);
double fCPUUserTime = FileTimeToDouble(ftUser);
nCPUUseRate= (int)(100.0 - (fCPUIdleTime - m_fOldCPUIdleTime)
/ (fCPUKernelTime - m_fOldCPUKernelTime + fCPUUserTime - m_fOldCPUUserTime)
*100.0);
if (nCPUUseRate<0)
{
int i = 0;
}
m_fOldCPUIdleTime = fCPUIdleTime;
m_fOldCPUKernelTime = fCPUKernelTime;
m_fOldCPUUserTime = fCPUUserTime;
}
else
MessageBox(0,0,0,0);
return nCPUUseRate;
}
private:
double FileTimeToDouble(FILETIME &filetime)
{
return (double)(filetime.dwHighDateTime * 4.294967296E9) + (double)filetime.dwLowDateTime;
}
private:
double m_fOldCPUIdleTime;
double m_fOldCPUKernelTime;
double m_fOldCPUUserTime;
};
// 全局变量:
DWORD t,d;
RECT rc;
HBITMAP g_hbitmap;
BITMAP Bmp; //BITMAP是结构体
HDC hDc,hDcMem; //hDcMen兼容设备
HINSTANCE hInst; // 当前实例
INT_PTR CALLBACK DialogProc( //主界面
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
INT_PTR CALLBACK DialoRocket(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{
switch (uMsg)
{
case WM_TIMER:
{
RECT rc;
GetWindowRect(hwndDlg,&rc);
rc.top -=10;
rc.bottom-=10;
if (rc.bottom<=0)
{
KillTimer(hwndDlg,1);
ShowWindow(hwndDlg,SW_HIDE);
CString b;
b.Format(L"清除了%d%%内存",t-d);
MessageBox(hwndDlg,b,L"清理成功!",1);
break;
}
MoveWindow(hwndDlg,rc.left,rc.top,100,150,1);
InvalidateRect(hwndDlg,&rc,1);
}
break;
case WM_LBUTTONDOWN:
{
HANDLE hProcessSnap; // 进程快照句柄
HANDLE hProcess; // 进程句柄
PROCESSENTRY32 StcPe32 = {0}; // 进程快照信息
StcPe32.dwSize = sizeof(PROCESSENTRY32);
// 创建进程相关的快照句柄
hProcessSnap= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (!hProcessSnap)
{
return 0;
}
// 通过进程快照句柄获取第一个进程信息
if (!Process32First(hProcessSnap,&StcPe32))
{
CloseHandle( hProcessSnap);
return 0;
}
MEMORYSTATUS memStatus1;
GlobalMemoryStatus(&memStatus1);
DWORD t = memStatus1.dwMemoryLoad;
do
{
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION,FALSE,StcPe32.th32ProcessID);
if (hProcess!=0)
SetProcessWorkingSetSize(hProcess,-1,-1);
} while(Process32Next(hProcessSnap,&StcPe32));
MEMORYSTATUS memStatus;
GlobalMemoryStatus(&memStatus);
DWORD d = memStatus.dwMemoryLoad;
}break;
case WM_LBUTTONUP:
{
SetTimer(hwndDlg,1,100,0);
}
default:
break;
}
return 0;
}
HINSTANCE g_hInstance;
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
g_hInstance = hInstance;
DialogBox(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,DialogProc);
return 0;
}
INT_PTR CALLBACK DialogProc( //主界面
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{
switch (uMsg)
{
case WM_TIMER:
{
HWND H_cpu = GetDlgItem(hwndDlg,IDC_cpu);
HWND H_memory = GetDlgItem(hwndDlg,IDC_neicun);
CCPUUseRate obj;
obj.Initialize();
HANDLE hEvent = CreateEvent (NULL,FALSE,FALSE,NULL);
WaitForSingleObject( hEvent,300); //等待500毫秒
int i = obj.GetCPUUseRate();
CString strCpu;
strCpu.Format(L"CPU占用:%d%%",i);
SetWindowText(H_cpu,strCpu);
MEMORYSTATUS memStatus;
GlobalMemoryStatus(&memStatus);
CString strmemy;
strmemy.Format(L"内存占用:%d%%",memStatus.dwMemoryLoad);
SetWindowText(H_memory,strmemy);
}break;
case WM_INITDIALOG:
{
HWND H_cpu = GetDlgItem(hwndDlg,IDC_cpu);
HWND H_memory = GetDlgItem(hwndDlg,IDC_neicun);
SetWindowText(H_cpu,L"CPU占用:10000%");
SetWindowText(H_memory,L"内存占用:20000%");
SetTimer(hwndDlg,2,1000,0);
}break;
case WM_MOUSEMOVE:
{
SystemParametersInfo(SPI_GETWORKAREA,0,&rc,0);
ShowWindow(hwndDlg,SW_HIDE);
KillTimer(hwndDlg,2);
HWND hWnd = CreateDialog(g_hInstance,(LPCTSTR)IDD_DIALOG2,hwndDlg,DialoRocket);
MoveWindow(hWnd,rc.right-100,rc.bottom-150,100,150,1);
// g_hbitmap=LoadBitmap(g_hInstance,L"IDB_BITMAP2");
// GetObject(g_hbitmap,sizeof(BITMAP),&g_hbitmap); //获取位图尺寸
// SelectObject(hDcMem,g_hbitmap); //将位图加到设备中
// BitBlt(GetDC(hWnd),0,20,Bmp.bmWidth,Bmp.bmHeight,hDcMem,0,0,SRCCOPY); //显示位图
ShowWindow(hWnd,SW_SHOW);
}break;
default:
break;
}
return 0;
}