⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pstat.c

📁 <Win2k系统编程>源码.次数为国人自编,内容丰富,还是不错的.
💻 C
📖 第 1 页 / 共 2 页
字号:

#include "pwalk.h"

#define ONE_K	      1024
#define ONE_MEG       1048576

extern HFONT	     hFont;
extern LPVOID	     lpWalkerList;
extern DBGPROCESS    *lpChildProcess;
extern int	     yChar;
extern SIZE	     sChar0;

/* static variables that determine size of 3D status box */
int	xSTATBOX;
int	cxSTATBOX;
int	dxSTATBOX;
int	ySTATBOX;
int	dyuSTATBOX;
int	dylSTATBOX;



void WINAPI TallyProcessStats (HWND, int *, int *, int *);
void WINAPI DrawBorders (HWND, LPPAINTSTRUCT);
void WINAPI DrawStatusText (HWND, LPPAINTSTRUCT, char *, COLORREF);


/* status window proc */
LONG WINAPI StatusWndProc (
    HWND    hWnd,
    UINT    uMsg,
    WPARAM  wParam,
    LPARAM  lParam)
{
	  LONG	      lRet = 1;
static	  BOOL	      bDefault;
static	  char	      szDefault[MAX_PATH];
static	  COLORREF    crText;

    switch (uMsg)
	{
	case WM_CREATE:
	    {
	    RECT    rc;

	    SetWindowLong (hWnd,
			   WXB_HPENHILITE,
			   (LONG)CreatePen (PS_SOLID, 0, GetSysColor (COLOR_BTNHIGHLIGHT)));
	    SetWindowLong (hWnd,
			   WXB_HPENSHADOW,
			   (LONG)CreatePen (PS_SOLID, 0, GetSysColor (COLOR_BTNSHADOW)));

	    /* initialize default status text */
	    LoadString (GetModuleHandle (NULL),
			IDS_STATUSREADY,
			szDefault,
			sizeof (szDefault));
	    crText = GetSysColor (COLOR_WINDOWTEXT);

	    /* add rewalk button */
	    GetClientRect (GetParent (hWnd), &rc);
	    CreateWindow ("button",
			  "Rewalk",
			  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			  rc.right-74, -1, 75, sChar0.cy+10*GetSystemMetrics (SM_CYBORDER),
			  hWnd,
			  (HMENU)IDC_REWALK,
			  GetModuleHandle (NULL),
			  NULL);

	    bDefault = TRUE;
	    }
	    break;

	case WM_SIZE:
	    {
	    RECT    rc;

	    GetClientRect (GetParent (hWnd), &rc);

	    xSTATBOX = 10 * GetSystemMetrics (SM_CXBORDER);
	    cxSTATBOX = rc.right/3 + 50;
	    dxSTATBOX = 4 * GetSystemMetrics (SM_CXBORDER);
	    ySTATBOX = 2 * GetSystemMetrics (SM_CYBORDER);
	    dyuSTATBOX = 1 * GetSystemMetrics (SM_CYBORDER);
	    dylSTATBOX = 2 * GetSystemMetrics (SM_CYBORDER);

	    /* move child windows in view */
	    MoveWindow (GetDlgItem (hWnd, IDC_REWALK),
			rc.right-74,
			-1,
			75,
			yChar+10*GetSystemMetrics (SM_CYBORDER),
			TRUE);

	    /* make sure we repaint correctly */
	    InvalidateRect (hWnd, NULL, TRUE);
	    }
	    break;

	case WM_TIMER:
	    {
	    RECT    rcStatus;

	    KillTimer (hWnd, IDT_STATUS);
	    bDefault = TRUE;
	    /* invalidate status text area */
	    SetRect (&rcStatus,
		     xSTATBOX+1,
		     ySTATBOX+1,
		     xSTATBOX+cxSTATBOX,
		     ySTATBOX+dylSTATBOX+dyuSTATBOX+yChar);
	    InvalidateRect (hWnd, &rcStatus, TRUE);
	    crText = GetSysColor (COLOR_WINDOWTEXT);
	    }
	    break;

	case WM_SETTEXT:
	    {
	    RECT    rcStatus;

	    /* release current string */
	    if (GetWindowLong (hWnd, WXB_LPWINDOWTEXT))
		LocalFree ((HLOCAL)GetWindowLong (hWnd, WXB_LPWINDOWTEXT));
	    SetWindowLong (hWnd, WXB_LPWINDOWTEXT, 0);

	    /* if null string, reset to default */
	    if ((char *)lParam == NULL)
		{
		bDefault = TRUE;
		crText = GetSysColor (COLOR_WINDOWTEXT);
		}
	    else
		{
		crText = (COLORREF)wParam;

		/* allocate space for new string */
		SetWindowLong (hWnd,
			       WXB_LPWINDOWTEXT,
			       (LONG)LocalAlloc (LPTR, strlen ((LPSTR)lParam)+1));
		strcpy ((char *)GetWindowLong (hWnd, WXB_LPWINDOWTEXT), (char *)lParam);

		/* restart five second timer */
		KillTimer (hWnd, IDT_STATUS);
		SetTimer (hWnd, IDT_STATUS, 5000, NULL);

		bDefault = FALSE;
		}

	    /* invalidate status text area */
	    SetRect (&rcStatus,
		     xSTATBOX+1,
		     ySTATBOX+1,
		     xSTATBOX+cxSTATBOX,
		     ySTATBOX+dylSTATBOX+dyuSTATBOX+yChar);
	    InvalidateRect (hWnd, &rcStatus, TRUE);
	    }
	    break;

	case WM_PAINT:
	    {
	    PAINTSTRUCT    ps;
	    RECT	   rc;

	    BeginPaint (hWnd, &ps);
	    GetClientRect (hWnd, &rc);

	    /* draw 3D effects in window */
	    DrawBorders (hWnd, &ps);

	    /* update text */
	    if (bDefault)
		DrawStatusText (hWnd, &ps, szDefault, crText);
	    else
		DrawStatusText (hWnd,
				&ps,
				(char *)GetWindowLong (hWnd, WXB_LPWINDOWTEXT),
				crText);

	    EndPaint (hWnd, &ps);
	    }
	    break;

	/* user defined message for updating child process information */
	case UM_UPDATE:
	    EnableWindow (GetDlgItem (hWnd, IDC_REWALK), ((LPVOID)wParam != NULL));
	    break;

	case WM_COMMAND:
	    if (LOWORD (wParam) == IDC_REWALK)
		PostMessage (GetParent (hWnd), WM_COMMAND, IDM_PROCESSREWALK, 0);
	    break;

	case WM_DESTROY:
	    /* free pen objects */
	    DeleteObject ((HPEN)GetWindowLong (hWnd, WXB_HPENHILITE));
	    DeleteObject ((HPEN)GetWindowLong (hWnd, WXB_HPENSHADOW));

	    /* free local memory from window text */
	    if (GetWindowLong (hWnd, WXB_LPWINDOWTEXT))
		LocalFree ((HLOCAL)GetWindowLong (hWnd, WXB_LPWINDOWTEXT));
	    break;

	default:
	    lRet = DefWindowProc (hWnd, uMsg, wParam, lParam);
	    break;
	}

    return lRet;
}




/* system statistics window proc */
LONG WINAPI SysStatWndProc (
    HWND    hWnd,
    UINT    uMsg,
    WPARAM  wParam,
    LPARAM  lParam)
{
    LONG    lRet = 1;

static	  MEMORYSTATUS	  msInfo, msInfoOld;
static	  SYSTEM_INFO	  sysInfo, sysInfoOld;
static	  DWORD 	  dwFreeDiskOld, dwFreeDisk;
static	  DWORD 	  dwTotalDiskOld, dwTotalDisk;

    switch (uMsg)
	{
	case WM_CREATE:
	    /* get system info */
	    GlobalMemoryStatus (&msInfo);
	    GetSystemInfo (&sysInfo);
	    GetFreeDiskSpace (&dwTotalDisk, &dwFreeDisk);

	    /* update old data with current data */
	    msInfoOld = msInfo;
	    sysInfoOld = sysInfo;
	    dwTotalDiskOld = dwTotalDisk;
	    dwFreeDiskOld = dwFreeDisk;

	    /* create buttons controls */
	    CreateWindow ("button",
			  "Refresh",
			  WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
			  100, 210, 75, 25,
			  hWnd,
			  (HMENU)IDC_REFRESH,
			  GetModuleHandle (NULL),
			  NULL);

	    CreateWindow ("button",
			  "Cancel",
			  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			  205, 210, 75, 25,
			  hWnd,
			  (HMENU)IDC_CANCEL,
			  GetModuleHandle (NULL),
			  NULL);
	    break;

	case WM_CHAR:
	    switch (wParam)
		{
		case VK_RETURN:
		    GlobalMemoryStatus (&msInfo);
		    GetSystemInfo (&sysInfo);
		    GetFreeDiskSpace (&dwTotalDisk, &dwFreeDisk);
		    InvalidateRect (hWnd, NULL, TRUE);
		    UpdateWindow (hWnd);
		    break;

		case VK_ESCAPE:
		    DestroyWindow (hWnd);
		    break;
		}
	    break;

	case WM_COMMAND:
	    switch (LOWORD (wParam))
		{
		case IDC_REFRESH:
		    /* save previous values */
		    msInfoOld = msInfo;
		    sysInfoOld = sysInfo;
		    dwTotalDiskOld = dwTotalDisk;
		    dwFreeDiskOld = dwFreeDisk;

		    /* get current values */
		    GlobalMemoryStatus (&msInfo);
		    GetSystemInfo (&sysInfo);
		    GetFreeDiskSpace (&dwTotalDisk, &dwFreeDisk);
		    InvalidateRect (hWnd, NULL, TRUE);
		    UpdateWindow (hWnd);
		    break;

		case IDC_CANCEL:
		    DestroyWindow (hWnd);
		    break;
		}
	    break;


	case WM_PAINT:
	    {
	    PAINTSTRUCT    ps;
	    char	   szText[100];
	    HFONT	   hOldFont;
	    int 	   nLen;
	    SIZE	   size;
	    POINT	   pt;
	    COLORREF	   crText;

	    BeginPaint (hWnd, &ps);

	    /* set background mode to transparent */
	    SetBkMode (ps.hdc, TRANSPARENT);
	    hOldFont = SelectObject (ps.hdc, hFont);

	    /* draw vertical separating line */
	    MoveToEx (ps.hdc, 395, 5, &pt);
	    LineTo (ps.hdc, 395, 200);

	    /* refresh change header */
	    wsprintf (szText, "%13s", "current value");
	    SetRect (&(ps.rcPaint), 0, 5, 395, 20);
	    ExtTextOut (ps.hdc, 275, 5, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);

	    /* refresh change header */
	    wsprintf (szText, "%10s", "changed by");
	    SetRect (&(ps.rcPaint), 395, 5, 500, 20);
	    ExtTextOut (ps.hdc, 400, 5, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);

	    /* memory load statistic */
	    nLen = wsprintf (szText, "%30s     %10lu", "Relative memory load [0-100]: ", msInfo.dwMemoryLoad);
	    GetTextExtentPoint (ps.hdc, szText, nLen, &size);
	    SetRect (&(ps.rcPaint), 0, 20, 395, 35);
	    ExtTextOut (ps.hdc, 10, 20, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
	    if (msInfo.dwMemoryLoad > msInfoOld.dwMemoryLoad)
		{
		crText = SetTextColor (ps.hdc, RGB (0, 100, 0));
		wsprintf (szText, "+%-1lu", (msInfo.dwMemoryLoad-msInfoOld.dwMemoryLoad));
		SetRect (&(ps.rcPaint), 395, 20, 500, 35);
		ExtTextOut (ps.hdc, 400, 20, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
		SetTextColor (ps.hdc, crText);
		}
	    else if (msInfo.dwMemoryLoad < msInfoOld.dwMemoryLoad)
		{
		crText = SetTextColor (ps.hdc, RGB (100, 0, 0));
		wsprintf (szText, "-%-1lu", (msInfoOld.dwMemoryLoad-msInfo.dwMemoryLoad));
		SetRect (&(ps.rcPaint), 395, 20, 500, 65);
		ExtTextOut (ps.hdc, 400, 20, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
		SetTextColor (ps.hdc, crText);
		}

	    /* pagesize */
	    nLen = wsprintf (szText, "%22s             %10lub", "Pagesize granularity: ", sysInfo.dwPageSize);
	    GetTextExtentPoint (ps.hdc, szText, nLen, &size);
	    SetRect (&(ps.rcPaint), 0, 35, 395, 50);
	    ExtTextOut (ps.hdc, 10, 35, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);

	    /* total physical memory */
	    nLen = wsprintf (szText, "%23s            %10luKb", "Total physical memory: ", msInfo.dwTotalPhys/ONE_K);
	    GetTextExtentPoint (ps.hdc, szText, nLen, &size);
	    SetRect (&(ps.rcPaint), 0, 50, 395, 65);
	    ExtTextOut (ps.hdc, 10, 50, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);

	    /* available physical memory */
	    nLen = wsprintf (szText, "%27s        %10luKb", "Available physical memory: ", msInfo.dwAvailPhys/ONE_K);
	    GetTextExtentPoint (ps.hdc, szText, nLen, &size);
	    SetRect (&(ps.rcPaint), 0, 65, 395, 80);
	    ExtTextOut (ps.hdc, 10, 65, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
	    if (msInfo.dwAvailPhys > msInfoOld.dwAvailPhys)
		{
		crText = SetTextColor (ps.hdc, RGB (0, 100, 0));
		wsprintf (szText, "+%-1luKb", (msInfo.dwAvailPhys-msInfoOld.dwAvailPhys)/ONE_K);
		SetRect (&(ps.rcPaint), 395, 65, 500, 80);
		ExtTextOut (ps.hdc, 400, 65, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
		SetTextColor (ps.hdc, crText);
		}
	    else if (msInfo.dwAvailPhys < msInfoOld.dwAvailPhys)
		{
		crText = SetTextColor (ps.hdc, RGB (100, 0, 0));
		wsprintf (szText, "-%-1luKb", (msInfoOld.dwAvailPhys-msInfo.dwAvailPhys)/ONE_K);
		SetRect (&(ps.rcPaint), 395, 65, 500, 80);
		ExtTextOut (ps.hdc, 400, 65, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0);
		SetTextColor (ps.hdc, crText);
		}

	    /* total pagefile space */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -