📄 pstat.c
字号:
nLen = wsprintf (szText, "%24s %10luMb", "Maximum pagefile space: ", msInfo.dwTotalPageFile/ONE_MEG);
GetTextExtentPoint (ps.hdc, szText, nLen, &size);
SetRect (&(ps.rcPaint), 0, 80, 395, 95);
ExtTextOut (ps.hdc, 10, 80, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
if (msInfo.dwTotalPageFile > msInfoOld.dwTotalPageFile)
{
crText = SetTextColor (ps.hdc, RGB (0, 100, 0));
wsprintf (szText, "+%-1luMb", (msInfo.dwTotalPageFile-msInfoOld.dwTotalPageFile)/ONE_MEG);
SetRect (&(ps.rcPaint), 395, 80, 500, 95);
ExtTextOut (ps.hdc, 400, 80, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
SetTextColor (ps.hdc, crText);
}
else if (msInfo.dwTotalPageFile < msInfoOld.dwTotalPageFile)
{
crText = SetTextColor (ps.hdc, RGB (100, 0, 0));
wsprintf (szText, "-%-1luMb", (msInfoOld.dwTotalPageFile-msInfo.dwTotalPageFile)/ONE_MEG);
SetRect (&(ps.rcPaint), 395, 80, 500, 95);
ExtTextOut (ps.hdc, 400, 65, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
SetTextColor (ps.hdc, crText);
}
/* available pagefile space */
nLen = wsprintf (szText, "%26s %10luMb", "Available pagefile space: ", (msInfo.dwAvailPageFile)/ONE_MEG);
GetTextExtentPoint (ps.hdc, szText, nLen, &size);
SetRect (&(ps.rcPaint), 0, 95, 395, 110);
ExtTextOut (ps.hdc, 10, 95, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
if (msInfo.dwAvailPageFile > msInfoOld.dwAvailPageFile)
{
crText = SetTextColor (ps.hdc, RGB (0, 100, 0));
wsprintf (szText, "+%-1luKb", (msInfo.dwAvailPageFile-msInfoOld.dwAvailPageFile)/ONE_K);
SetRect (&(ps.rcPaint), 395, 95, 500, 110);
ExtTextOut (ps.hdc, 400, 95, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
SetTextColor (ps.hdc, crText);
}
else if (msInfo.dwAvailPageFile < msInfoOld.dwAvailPageFile)
{
crText = SetTextColor (ps.hdc, RGB (100, 0, 0));
wsprintf (szText, "-%-1luKb", (msInfoOld.dwAvailPageFile-msInfo.dwAvailPageFile)/ONE_K);
SetRect (&(ps.rcPaint), 395, 95, 500, 110);
ExtTextOut (ps.hdc, 400, 95, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
SetTextColor (ps.hdc, crText);
}
/* total virtual address space */
nLen = wsprintf (szText, "%29s %10luMb", "Total virtual address space: ", msInfo.dwTotalVirtual/ONE_MEG);
GetTextExtentPoint (ps.hdc, szText, nLen, &size);
SetRect (&(ps.rcPaint), 0, 110, 395, 125);
ExtTextOut (ps.hdc, 10, 110, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
/* available virtual address space */
nLen = wsprintf (szText, "%33s %10luMb", "Available virtual address space: ", msInfo.dwAvailVirtual/ONE_MEG);
GetTextExtentPoint (ps.hdc, szText, nLen, &size);
SetRect (&(ps.rcPaint), 0, 125, 395, 140);
ExtTextOut (ps.hdc, 10, 125, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
/* lowest available virtual address */
nLen = wsprintf (szText, "%25s %#08lx", "Minimum virtual address: ", sysInfo.lpMinimumApplicationAddress);
GetTextExtentPoint (ps.hdc, szText, nLen, &size);
SetRect (&(ps.rcPaint), 0, 140, 395, 155);
ExtTextOut (ps.hdc, 10, 140, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
/* highest available virtual address */
nLen = wsprintf (szText, "%25s %#08lx", "Maximum virtual address: ", sysInfo.lpMaximumApplicationAddress);
GetTextExtentPoint (ps.hdc, szText, nLen, &size);
SetRect (&(ps.rcPaint), 0, 155, 395, 170);
ExtTextOut (ps.hdc, 10, 155, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
/* total disk space */
nLen = wsprintf (szText, "%24s %10luMb", "Total local disk space: ", dwTotalDisk/ONE_MEG);
GetTextExtentPoint (ps.hdc, szText, nLen, &size);
SetRect (&(ps.rcPaint), 0, 170, 395, 185);
ExtTextOut (ps.hdc, 10, 170, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
/* free disk disk space */
nLen = wsprintf (szText, "%23s %10luMb", "Free local disk space: ", dwFreeDisk/ONE_MEG);
GetTextExtentPoint (ps.hdc, szText, nLen, &size);
SetRect (&(ps.rcPaint), 0, 185, 395, 200);
ExtTextOut (ps.hdc, 10, 185, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
if (dwFreeDisk > dwFreeDiskOld)
{
crText = SetTextColor (ps.hdc, RGB (0, 100, 0));
wsprintf (szText, "+%-1luMb", (dwFreeDisk-dwFreeDiskOld)/ONE_MEG);
SetRect (&(ps.rcPaint), 395, 185, 500, 200);
ExtTextOut (ps.hdc, 400, 185, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
SetTextColor (ps.hdc, crText);
}
else if (dwFreeDisk < dwFreeDiskOld)
{
crText = SetTextColor (ps.hdc, RGB (100, 0, 0));
wsprintf (szText, "-%-1luMb", (dwFreeDiskOld-dwFreeDisk)/ONE_MEG);
SetRect (&(ps.rcPaint), 395, 185, 500, 200);
ExtTextOut (ps.hdc, 400, 185, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
SetTextColor (ps.hdc, crText);
}
/* replace old font */
SelectObject (ps.hdc, hOldFont);
EndPaint (hWnd, &ps);
}
break;
default:
lRet = DefWindowProc (hWnd, uMsg, wParam, lParam);
}
return lRet;
}
/* process statistics window proc */
LONG WINAPI ProStatWndProc (
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
LONG lRet = 1;
static int nTotalFree, nTotalCommit, nTotalReserve;
switch (uMsg)
{
case WM_CREATE:
{
/* create buttons controls */
CreateWindow ("button",
"Refresh",
WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
45, 55, 75, 25,
hWnd,
(HMENU)IDC_REFRESH,
GetModuleHandle (NULL),
NULL);
CreateWindow ("button",
"Rewalk",
WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
140, 55, 75, 25,
hWnd,
(HMENU)IDM_PROCESSREWALK,
GetModuleHandle (NULL),
NULL);
CreateWindow ("button",
"Cancel",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
235, 55, 75, 25,
hWnd,
(HMENU)IDC_CANCEL,
GetModuleHandle (NULL),
NULL);
/* tally process statictics */
TallyProcessStats (hWnd, &nTotalFree, &nTotalReserve, &nTotalCommit);
}
break;
case WM_CHAR:
switch (wParam)
{
case VK_RETURN:
InvalidateRect (hWnd, NULL, TRUE);
UpdateWindow (hWnd);
break;
case VK_ESCAPE:
DestroyWindow (hWnd);
break;
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HFONT hOldFont;
char szText[100];
BeginPaint (hWnd, &ps);
hOldFont = SelectObject (ps.hdc, hFont);
SetBkMode (ps.hdc, TRANSPARENT);
/* total free memory */
wsprintf (szText,
"%19s %10luKb",
"Total free memory: ",
nTotalFree/ONE_K);
SetRect (&(ps.rcPaint), ps.rcPaint.left, 0, ps.rcPaint.right, 20);
ExtTextOut (ps.hdc,
10,
5,
ETO_CLIPPED,
&(ps.rcPaint),
szText,
strlen (szText),
0);
/* total committed memory */
wsprintf (szText,
"%24s %10luKb",
"Total committed memory: ",
nTotalCommit/ONE_K);
SetRect (&(ps.rcPaint), ps.rcPaint.left, 20, ps.rcPaint.right, 35);
ExtTextOut (ps.hdc,
10,
20,
ETO_CLIPPED,
&(ps.rcPaint),
szText,
strlen (szText),
0);
/* total reserved memory */
wsprintf (szText,
"%22s %10luKb",
"Total reserved memory:",
nTotalReserve/ONE_K);
SetRect (&(ps.rcPaint), ps.rcPaint.left, 35, ps.rcPaint.right, 50);
ExtTextOut (ps.hdc,
10,
35,
ETO_CLIPPED,
&(ps.rcPaint),
szText,
strlen (szText),
0);
SelectObject (ps.hdc, hOldFont);
EndPaint (hWnd, &ps);
}
break;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDM_PROCESSREWALK:
{
/* send message to parent to rewalk process */
SendMessage (GetParent (hWnd), uMsg, wParam, lParam);
/* tally new process statistics */
TallyProcessStats (hWnd, &nTotalFree, &nTotalReserve, &nTotalCommit);
InvalidateRect (hWnd, NULL, TRUE);
UpdateWindow (hWnd);
}
break;
case IDC_REFRESH:
InvalidateRect (hWnd, NULL, TRUE);
UpdateWindow (hWnd);
break;
case IDC_CANCEL:
DestroyWindow (hWnd);
break;
}
break;
default:
lRet = DefWindowProc (hWnd, uMsg, wParam, lParam);
}
return lRet;
}
/* determine process statistics from existing information */
void WINAPI TallyProcessStats (
HWND hWnd,
int *nTotalFree,
int *nTotalReserve,
int *nTotalCommit)
{
LPVMOBJECT lpVMO = (LPVMOBJECT)lpWalkerList;
int nRegions, i;
*nTotalFree = 0;
*nTotalCommit = 0;
*nTotalReserve = 0;
/* determine number of memory regions by number of entries in listbox */
nRegions = (int)SendMessage (GetWindow (GetParent (hWnd), GW_CHILD),
LB_GETCOUNT,
0,
0);
/* get stats for all memory regions in process */
for (i=0; i<nRegions; i++)
{
if (lpVMO[i].mbi.State & MEM_FREE)
*nTotalFree += lpVMO[i].mbi.RegionSize;
else if (lpVMO[i].mbi.State & MEM_COMMIT)
*nTotalCommit += lpVMO[i].mbi.RegionSize;
else
*nTotalReserve += lpVMO[i].mbi.RegionSize;
}
}
void WINAPI DrawBorders (
HWND hWnd,
LPPAINTSTRUCT lpps)
{
POINT pt;
HPEN hOldPen;
/* draw window hilites for 3D affect */
hOldPen = SelectObject (lpps->hdc, (HPEN)GetWindowLong (hWnd, WXB_HPENHILITE));
/* top line across window */
MoveToEx (lpps->hdc, lpps->rcPaint.left, lpps->rcPaint.top, &pt);
LineTo (lpps->hdc, lpps->rcPaint.right, lpps->rcPaint.top);
/* bottom line in status box */
MoveToEx (lpps->hdc,
xSTATBOX,
ySTATBOX+yChar+dyuSTATBOX+dylSTATBOX,
&pt);
LineTo (lpps->hdc,
xSTATBOX+cxSTATBOX,
ySTATBOX+yChar+dylSTATBOX+dyuSTATBOX);
/* right line in status box */
MoveToEx (lpps->hdc, xSTATBOX+cxSTATBOX, ySTATBOX, &pt);
LineTo (lpps->hdc,
xSTATBOX+cxSTATBOX,
ySTATBOX+yChar+dylSTATBOX+dyuSTATBOX+1);
/* draw window shadows for 3D affect */
hOldPen = SelectObject (lpps->hdc, (HPEN)GetWindowLong (hWnd, WXB_HPENSHADOW));
/* top line in status box */
MoveToEx (lpps->hdc, xSTATBOX, ySTATBOX, &pt);
LineTo (lpps->hdc, xSTATBOX+cxSTATBOX+1, ySTATBOX);
/* left line in status box */
MoveToEx (lpps->hdc, xSTATBOX, ySTATBOX, &pt);
LineTo (lpps->hdc, xSTATBOX, ySTATBOX+yChar+dylSTATBOX+dyuSTATBOX+1);
SelectObject (lpps->hdc, hOldPen);
}
void WINAPI DrawStatusText (
HWND hWnd,
LPPAINTSTRUCT lpps,
char *lpszText,
COLORREF crText)
{
HFONT hOldFont = SelectObject (lpps->hdc, hFont);
RECT rcStatus;
SetBkColor (lpps->hdc, GetSysColor (COLOR_BTNFACE));
SetTextColor (lpps->hdc, crText);
SetRect (&rcStatus,
xSTATBOX+1,
ySTATBOX+1,
xSTATBOX+cxSTATBOX,
ySTATBOX+dylSTATBOX+dyuSTATBOX+yChar);
ExtTextOut (lpps->hdc,
xSTATBOX+dxSTATBOX,
ySTATBOX+dyuSTATBOX,
ETO_OPAQUE | ETO_CLIPPED,
&rcStatus,
lpszText,
strlen (lpszText),
NULL);
SelectObject (lpps->hdc, hOldFont);
}
void WINAPI SetStatusText (
HWND hWnd,
int nIDS_STATUS,
COLORREF crText)
{
char szStatus[MAX_PATH];
LoadString (GetModuleHandle (NULL), nIDS_STATUS, szStatus, sizeof (szStatus));
SendMessage (GetDlgItem (hWnd, IDC_STATUSWND), WM_SETTEXT, crText, (LONG)szStatus);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -