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

📄 pstat.c

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