|
|
1.1 ! root 1: #include "pwalk.h" ! 2: ! 3: #define ONE_K 1024 ! 4: #define ONE_MEG 1048576 ! 5: ! 6: extern HFONT hFont; ! 7: extern LPVOID lpWalkerList; ! 8: extern DBGPROCESS *lpChildProcess; ! 9: extern int yChar; ! 10: ! 11: /* static variables that determine size of 3D status box */ ! 12: int xSTATBOX; ! 13: int cxSTATBOX; ! 14: int dxSTATBOX; ! 15: int ySTATBOX; ! 16: int dyuSTATBOX; ! 17: int dylSTATBOX; ! 18: ! 19: ! 20: ! 21: void WINAPI TallyProcessStats (HWND, int *, int *, int *); ! 22: void WINAPI DrawBorders (HWND, LPPAINTSTRUCT); ! 23: void WINAPI DrawStatusText (HWND, LPPAINTSTRUCT, char *, COLORREF); ! 24: ! 25: ! 26: /* status window proc */ ! 27: LONG WINAPI StatusWndProc ( ! 28: HWND hWnd, ! 29: UINT uMsg, ! 30: WPARAM wParam, ! 31: LPARAM lParam) ! 32: { ! 33: LONG lRet = 1; ! 34: static BOOL bDefault; ! 35: static char szDefault[MAX_PATH]; ! 36: static COLORREF crText; ! 37: ! 38: switch (uMsg) ! 39: { ! 40: case WM_CREATE: ! 41: { ! 42: RECT rc; ! 43: ! 44: SetWindowLong (hWnd, ! 45: WXB_HPENHILITE, ! 46: (LONG)CreatePen (PS_SOLID, 0, GetSysColor (COLOR_BTNHIGHLIGHT))); ! 47: SetWindowLong (hWnd, ! 48: WXB_HPENSHADOW, ! 49: (LONG)CreatePen (PS_SOLID, 0, GetSysColor (COLOR_BTNSHADOW))); ! 50: ! 51: /* initialize default status text */ ! 52: LoadString (GetModuleHandle (NULL), ! 53: IDS_STATUSREADY, ! 54: szDefault, ! 55: sizeof (szDefault)); ! 56: crText = GetSysColor (COLOR_WINDOWTEXT); ! 57: ! 58: /* add rewalk button */ ! 59: GetClientRect (GetParent (hWnd), &rc); ! 60: CreateWindow ("button", ! 61: "Rewalk", ! 62: WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, ! 63: rc.right-74, -1, 75, yChar+10*GetSystemMetrics (SM_CYBORDER), ! 64: hWnd, ! 65: (HMENU)IDC_REWALK, ! 66: GetModuleHandle (NULL), ! 67: NULL); ! 68: ! 69: bDefault = TRUE; ! 70: } ! 71: break; ! 72: ! 73: case WM_SIZE: ! 74: { ! 75: RECT rc; ! 76: ! 77: GetClientRect (GetParent (hWnd), &rc); ! 78: ! 79: xSTATBOX = 10 * GetSystemMetrics (SM_CXBORDER); ! 80: cxSTATBOX = rc.right/3 + 50; ! 81: dxSTATBOX = 4 * GetSystemMetrics (SM_CXBORDER); ! 82: ySTATBOX = 2 * GetSystemMetrics (SM_CYBORDER); ! 83: dyuSTATBOX = 1 * GetSystemMetrics (SM_CYBORDER); ! 84: dylSTATBOX = 2 * GetSystemMetrics (SM_CYBORDER); ! 85: ! 86: /* move child windows in view */ ! 87: MoveWindow (GetDlgItem (hWnd, IDC_REWALK), ! 88: rc.right-74, ! 89: -1, ! 90: 75, ! 91: yChar+10*GetSystemMetrics (SM_CYBORDER), ! 92: TRUE); ! 93: ! 94: /* make sure we repaint correctly */ ! 95: InvalidateRect (hWnd, NULL, TRUE); ! 96: } ! 97: break; ! 98: ! 99: case WM_TIMER: ! 100: { ! 101: RECT rcStatus; ! 102: ! 103: KillTimer (hWnd, IDT_STATUS); ! 104: bDefault = TRUE; ! 105: /* invalidate status text area */ ! 106: SetRect (&rcStatus, ! 107: xSTATBOX+1, ! 108: ySTATBOX+1, ! 109: xSTATBOX+cxSTATBOX, ! 110: ySTATBOX+dylSTATBOX+dyuSTATBOX+yChar); ! 111: InvalidateRect (hWnd, &rcStatus, TRUE); ! 112: crText = GetSysColor (COLOR_WINDOWTEXT); ! 113: } ! 114: break; ! 115: ! 116: case WM_SETTEXT: ! 117: { ! 118: RECT rcStatus; ! 119: ! 120: /* release current string */ ! 121: if (GetWindowLong (hWnd, WXB_LPWINDOWTEXT)) ! 122: LocalFree ((HLOCAL)GetWindowLong (hWnd, WXB_LPWINDOWTEXT)); ! 123: SetWindowLong (hWnd, WXB_LPWINDOWTEXT, 0); ! 124: ! 125: /* if null string, reset to default */ ! 126: if ((char *)lParam == NULL) ! 127: { ! 128: bDefault = TRUE; ! 129: crText = GetSysColor (COLOR_WINDOWTEXT); ! 130: } ! 131: else ! 132: { ! 133: crText = (COLORREF)wParam; ! 134: ! 135: /* allocate space for new string */ ! 136: SetWindowLong (hWnd, ! 137: WXB_LPWINDOWTEXT, ! 138: (LONG)LocalAlloc (LPTR, strlen ((LPSTR)lParam)+1)); ! 139: strcpy ((char *)GetWindowLong (hWnd, WXB_LPWINDOWTEXT), (char *)lParam); ! 140: ! 141: /* restart five second timer */ ! 142: KillTimer (hWnd, IDT_STATUS); ! 143: SetTimer (hWnd, IDT_STATUS, 5000, NULL); ! 144: ! 145: bDefault = FALSE; ! 146: } ! 147: ! 148: /* invalidate status text area */ ! 149: SetRect (&rcStatus, ! 150: xSTATBOX+1, ! 151: ySTATBOX+1, ! 152: xSTATBOX+cxSTATBOX, ! 153: ySTATBOX+dylSTATBOX+dyuSTATBOX+yChar); ! 154: InvalidateRect (hWnd, &rcStatus, TRUE); ! 155: } ! 156: break; ! 157: ! 158: case WM_PAINT: ! 159: { ! 160: PAINTSTRUCT ps; ! 161: RECT rc; ! 162: ! 163: BeginPaint (hWnd, &ps); ! 164: GetClientRect (hWnd, &rc); ! 165: ! 166: /* draw 3D effects in window */ ! 167: DrawBorders (hWnd, &ps); ! 168: ! 169: /* update text */ ! 170: if (bDefault) ! 171: DrawStatusText (hWnd, &ps, szDefault, crText); ! 172: else ! 173: DrawStatusText (hWnd, ! 174: &ps, ! 175: (char *)GetWindowLong (hWnd, WXB_LPWINDOWTEXT), ! 176: crText); ! 177: ! 178: EndPaint (hWnd, &ps); ! 179: } ! 180: break; ! 181: ! 182: /* user defined message for updating child process information */ ! 183: case UM_UPDATE: ! 184: EnableWindow (GetDlgItem (hWnd, IDC_REWALK), ((LPVOID)wParam != NULL)); ! 185: break; ! 186: ! 187: case WM_COMMAND: ! 188: if (LOWORD (wParam) == IDC_REWALK) ! 189: PostMessage (GetParent (hWnd), WM_COMMAND, IDM_PROCESSREWALK, 0); ! 190: break; ! 191: ! 192: case WM_DESTROY: ! 193: /* free pen objects */ ! 194: DeleteObject ((HPEN)GetWindowLong (hWnd, WXB_HPENHILITE)); ! 195: DeleteObject ((HPEN)GetWindowLong (hWnd, WXB_HPENSHADOW)); ! 196: ! 197: /* free local memory from window text */ ! 198: if (GetWindowLong (hWnd, WXB_LPWINDOWTEXT)) ! 199: LocalFree ((HLOCAL)GetWindowLong (hWnd, WXB_LPWINDOWTEXT)); ! 200: break; ! 201: ! 202: default: ! 203: lRet = DefWindowProc (hWnd, uMsg, wParam, lParam); ! 204: break; ! 205: } ! 206: ! 207: return lRet; ! 208: } ! 209: ! 210: ! 211: ! 212: ! 213: /* system statistics window proc */ ! 214: LONG WINAPI SysStatWndProc ( ! 215: HWND hWnd, ! 216: UINT uMsg, ! 217: WPARAM wParam, ! 218: LPARAM lParam) ! 219: { ! 220: LONG lRet = 1; ! 221: ! 222: static MEMORYSTATUS msInfo, msInfoOld; ! 223: static SYSTEM_INFO sysInfo, sysInfoOld; ! 224: static DWORD dwFreeDiskOld, dwFreeDisk; ! 225: static DWORD dwTotalDiskOld, dwTotalDisk; ! 226: ! 227: switch (uMsg) ! 228: { ! 229: case WM_CREATE: ! 230: /* get system info */ ! 231: GlobalMemoryStatus (&msInfo); ! 232: GetSystemInfo (&sysInfo); ! 233: GetFreeDiskSpace (&dwTotalDisk, &dwFreeDisk); ! 234: ! 235: /* update old data with current data */ ! 236: msInfoOld = msInfo; ! 237: sysInfoOld = sysInfo; ! 238: dwTotalDiskOld = dwTotalDisk; ! 239: dwFreeDiskOld = dwFreeDisk; ! 240: ! 241: /* create buttons controls */ ! 242: CreateWindow ("button", ! 243: "Refresh", ! 244: WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, ! 245: 100, 210, 75, 25, ! 246: hWnd, ! 247: (HMENU)IDC_REFRESH, ! 248: GetModuleHandle (NULL), ! 249: NULL); ! 250: ! 251: CreateWindow ("button", ! 252: "Cancel", ! 253: WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, ! 254: 205, 210, 75, 25, ! 255: hWnd, ! 256: (HMENU)IDC_CANCEL, ! 257: GetModuleHandle (NULL), ! 258: NULL); ! 259: break; ! 260: ! 261: case WM_CHAR: ! 262: switch (wParam) ! 263: { ! 264: case VK_RETURN: ! 265: GlobalMemoryStatus (&msInfo); ! 266: GetSystemInfo (&sysInfo); ! 267: GetFreeDiskSpace (&dwTotalDisk, &dwFreeDisk); ! 268: InvalidateRect (hWnd, NULL, TRUE); ! 269: UpdateWindow (hWnd); ! 270: break; ! 271: ! 272: case VK_ESCAPE: ! 273: DestroyWindow (hWnd); ! 274: break; ! 275: } ! 276: break; ! 277: ! 278: case WM_COMMAND: ! 279: switch (LOWORD (wParam)) ! 280: { ! 281: case IDC_REFRESH: ! 282: /* save previous values */ ! 283: msInfoOld = msInfo; ! 284: sysInfoOld = sysInfo; ! 285: dwTotalDiskOld = dwTotalDisk; ! 286: dwFreeDiskOld = dwFreeDisk; ! 287: ! 288: /* get current values */ ! 289: GlobalMemoryStatus (&msInfo); ! 290: GetSystemInfo (&sysInfo); ! 291: GetFreeDiskSpace (&dwTotalDisk, &dwFreeDisk); ! 292: InvalidateRect (hWnd, NULL, TRUE); ! 293: UpdateWindow (hWnd); ! 294: break; ! 295: ! 296: case IDC_CANCEL: ! 297: DestroyWindow (hWnd); ! 298: break; ! 299: } ! 300: break; ! 301: ! 302: ! 303: case WM_PAINT: ! 304: { ! 305: PAINTSTRUCT ps; ! 306: char szText[100]; ! 307: HFONT hOldFont; ! 308: int nLen; ! 309: SIZE size; ! 310: POINT pt; ! 311: COLORREF crText; ! 312: ! 313: BeginPaint (hWnd, &ps); ! 314: ! 315: /* set background mode to transparent */ ! 316: SetBkMode (ps.hdc, TRANSPARENT); ! 317: hOldFont = SelectObject (ps.hdc, hFont); ! 318: ! 319: /* draw vertical separating line */ ! 320: MoveToEx (ps.hdc, 395, 5, &pt); ! 321: LineTo (ps.hdc, 395, 200); ! 322: ! 323: /* refresh change header */ ! 324: wsprintf (szText, "%13s", "current value"); ! 325: SetRect (&(ps.rcPaint), 0, 5, 395, 20); ! 326: ExtTextOut (ps.hdc, 275, 5, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 327: ! 328: /* refresh change header */ ! 329: wsprintf (szText, "%10s", "changed by"); ! 330: SetRect (&(ps.rcPaint), 395, 5, 500, 20); ! 331: ExtTextOut (ps.hdc, 400, 5, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 332: ! 333: /* memory load statistic */ ! 334: nLen = wsprintf (szText, "%30s %10lu", "Relative memory load [0-100]: ", msInfo.dwMemoryLoad); ! 335: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 336: SetRect (&(ps.rcPaint), 0, 20, 395, 35); ! 337: ExtTextOut (ps.hdc, 10, 20, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 338: if (msInfo.dwMemoryLoad > msInfoOld.dwMemoryLoad) ! 339: { ! 340: crText = SetTextColor (ps.hdc, RGB (0, 100, 0)); ! 341: wsprintf (szText, "+%-1lu", (msInfo.dwMemoryLoad-msInfoOld.dwMemoryLoad)); ! 342: SetRect (&(ps.rcPaint), 395, 20, 500, 35); ! 343: ExtTextOut (ps.hdc, 400, 20, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 344: SetTextColor (ps.hdc, crText); ! 345: } ! 346: else if (msInfo.dwMemoryLoad < msInfoOld.dwMemoryLoad) ! 347: { ! 348: crText = SetTextColor (ps.hdc, RGB (100, 0, 0)); ! 349: wsprintf (szText, "-%-1lu", (msInfoOld.dwMemoryLoad-msInfo.dwMemoryLoad)); ! 350: SetRect (&(ps.rcPaint), 395, 20, 500, 65); ! 351: ExtTextOut (ps.hdc, 400, 20, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 352: SetTextColor (ps.hdc, crText); ! 353: } ! 354: ! 355: /* pagesize */ ! 356: nLen = wsprintf (szText, "%22s %10lub", "Pagesize granularity: ", sysInfo.dwPageSize); ! 357: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 358: SetRect (&(ps.rcPaint), 0, 35, 395, 50); ! 359: ExtTextOut (ps.hdc, 10, 35, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 360: ! 361: /* total physical memory */ ! 362: nLen = wsprintf (szText, "%23s %10luKb", "Total physical memory: ", msInfo.dwTotalPhys/ONE_K); ! 363: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 364: SetRect (&(ps.rcPaint), 0, 50, 395, 65); ! 365: ExtTextOut (ps.hdc, 10, 50, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 366: ! 367: /* available physical memory */ ! 368: nLen = wsprintf (szText, "%27s %10luKb", "Available physical memory: ", msInfo.dwAvailPhys/ONE_K); ! 369: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 370: SetRect (&(ps.rcPaint), 0, 65, 395, 80); ! 371: ExtTextOut (ps.hdc, 10, 65, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 372: if (msInfo.dwAvailPhys > msInfoOld.dwAvailPhys) ! 373: { ! 374: crText = SetTextColor (ps.hdc, RGB (0, 100, 0)); ! 375: wsprintf (szText, "+%-1luKb", (msInfo.dwAvailPhys-msInfoOld.dwAvailPhys)/ONE_K); ! 376: SetRect (&(ps.rcPaint), 395, 65, 500, 80); ! 377: ExtTextOut (ps.hdc, 400, 65, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 378: SetTextColor (ps.hdc, crText); ! 379: } ! 380: else if (msInfo.dwAvailPhys < msInfoOld.dwAvailPhys) ! 381: { ! 382: crText = SetTextColor (ps.hdc, RGB (100, 0, 0)); ! 383: wsprintf (szText, "-%-1luKb", (msInfoOld.dwAvailPhys-msInfo.dwAvailPhys)/ONE_K); ! 384: SetRect (&(ps.rcPaint), 395, 65, 500, 80); ! 385: ExtTextOut (ps.hdc, 400, 65, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 386: SetTextColor (ps.hdc, crText); ! 387: } ! 388: ! 389: /* total pagefile space */ ! 390: nLen = wsprintf (szText, "%24s %10luMb", "Maximum pagefile space: ", msInfo.dwTotalPageFile/ONE_MEG); ! 391: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 392: SetRect (&(ps.rcPaint), 0, 80, 395, 95); ! 393: ExtTextOut (ps.hdc, 10, 80, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 394: if (msInfo.dwTotalPageFile > msInfoOld.dwTotalPageFile) ! 395: { ! 396: crText = SetTextColor (ps.hdc, RGB (0, 100, 0)); ! 397: wsprintf (szText, "+%-1luMb", (msInfo.dwTotalPageFile-msInfoOld.dwTotalPageFile)/ONE_MEG); ! 398: SetRect (&(ps.rcPaint), 395, 80, 500, 95); ! 399: ExtTextOut (ps.hdc, 400, 80, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 400: SetTextColor (ps.hdc, crText); ! 401: } ! 402: else if (msInfo.dwTotalPageFile < msInfoOld.dwTotalPageFile) ! 403: { ! 404: crText = SetTextColor (ps.hdc, RGB (100, 0, 0)); ! 405: wsprintf (szText, "-%-1luMb", (msInfoOld.dwTotalPageFile-msInfo.dwTotalPageFile)/ONE_MEG); ! 406: SetRect (&(ps.rcPaint), 395, 80, 500, 95); ! 407: ExtTextOut (ps.hdc, 400, 65, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 408: SetTextColor (ps.hdc, crText); ! 409: } ! 410: ! 411: /* available pagefile space */ ! 412: nLen = wsprintf (szText, "%26s %10luMb", "Available pagefile space: ", (msInfo.dwAvailPageFile)/ONE_MEG); ! 413: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 414: SetRect (&(ps.rcPaint), 0, 95, 395, 110); ! 415: ExtTextOut (ps.hdc, 10, 95, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 416: if (msInfo.dwAvailPageFile > msInfoOld.dwAvailPageFile) ! 417: { ! 418: crText = SetTextColor (ps.hdc, RGB (0, 100, 0)); ! 419: wsprintf (szText, "+%-1luKb", (msInfo.dwAvailPageFile-msInfoOld.dwAvailPageFile)/ONE_K); ! 420: SetRect (&(ps.rcPaint), 395, 95, 500, 110); ! 421: ExtTextOut (ps.hdc, 400, 95, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 422: SetTextColor (ps.hdc, crText); ! 423: } ! 424: else if (msInfo.dwAvailPageFile < msInfoOld.dwAvailPageFile) ! 425: { ! 426: crText = SetTextColor (ps.hdc, RGB (100, 0, 0)); ! 427: wsprintf (szText, "-%-1luKb", (msInfoOld.dwAvailPageFile-msInfo.dwAvailPageFile)/ONE_K); ! 428: SetRect (&(ps.rcPaint), 395, 95, 500, 110); ! 429: ExtTextOut (ps.hdc, 400, 95, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 430: SetTextColor (ps.hdc, crText); ! 431: } ! 432: ! 433: /* total virtual address space */ ! 434: nLen = wsprintf (szText, "%29s %10luMb", "Total virtual address space: ", msInfo.dwTotalVirtual/ONE_MEG); ! 435: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 436: SetRect (&(ps.rcPaint), 0, 110, 395, 125); ! 437: ExtTextOut (ps.hdc, 10, 110, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 438: ! 439: /* available virtual address space */ ! 440: nLen = wsprintf (szText, "%33s %10luMb", "Available virtual address space: ", msInfo.dwAvailVirtual/ONE_MEG); ! 441: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 442: SetRect (&(ps.rcPaint), 0, 125, 395, 140); ! 443: ExtTextOut (ps.hdc, 10, 125, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 444: ! 445: /* lowest available virtual address */ ! 446: nLen = wsprintf (szText, "%25s %#08lx", "Minimum virtual address: ", sysInfo.lpMinimumApplicationAddress); ! 447: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 448: SetRect (&(ps.rcPaint), 0, 140, 395, 155); ! 449: ExtTextOut (ps.hdc, 10, 140, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 450: ! 451: /* highest available virtual address */ ! 452: nLen = wsprintf (szText, "%25s %#08lx", "Maximum virtual address: ", sysInfo.lpMaximumApplicationAddress); ! 453: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 454: SetRect (&(ps.rcPaint), 0, 155, 395, 170); ! 455: ExtTextOut (ps.hdc, 10, 155, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 456: ! 457: /* total disk space */ ! 458: nLen = wsprintf (szText, "%24s %10luMb", "Total local disk space: ", dwTotalDisk/ONE_MEG); ! 459: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 460: SetRect (&(ps.rcPaint), 0, 170, 395, 185); ! 461: ExtTextOut (ps.hdc, 10, 170, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 462: ! 463: /* free disk disk space */ ! 464: nLen = wsprintf (szText, "%23s %10luMb", "Free local disk space: ", dwFreeDisk/ONE_MEG); ! 465: GetTextExtentPoint (ps.hdc, szText, nLen, &size); ! 466: SetRect (&(ps.rcPaint), 0, 185, 395, 200); ! 467: ExtTextOut (ps.hdc, 10, 185, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 468: if (dwFreeDisk > dwFreeDiskOld) ! 469: { ! 470: crText = SetTextColor (ps.hdc, RGB (0, 100, 0)); ! 471: wsprintf (szText, "+%-1luMb", (dwFreeDisk-dwFreeDiskOld)/ONE_MEG); ! 472: SetRect (&(ps.rcPaint), 395, 185, 500, 200); ! 473: ExtTextOut (ps.hdc, 400, 185, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 474: SetTextColor (ps.hdc, crText); ! 475: } ! 476: else if (dwFreeDisk < dwFreeDiskOld) ! 477: { ! 478: crText = SetTextColor (ps.hdc, RGB (100, 0, 0)); ! 479: wsprintf (szText, "-%-1luMb", (dwFreeDiskOld-dwFreeDisk)/ONE_MEG); ! 480: SetRect (&(ps.rcPaint), 395, 185, 500, 200); ! 481: ExtTextOut (ps.hdc, 400, 185, ETO_CLIPPED, &(ps.rcPaint), szText, strlen (szText), 0); ! 482: SetTextColor (ps.hdc, crText); ! 483: } ! 484: ! 485: /* replace old font */ ! 486: SelectObject (ps.hdc, hOldFont); ! 487: EndPaint (hWnd, &ps); ! 488: } ! 489: break; ! 490: ! 491: default: ! 492: lRet = DefWindowProc (hWnd, uMsg, wParam, lParam); ! 493: } ! 494: ! 495: return lRet; ! 496: } ! 497: ! 498: ! 499: ! 500: ! 501: /* process statistics window proc */ ! 502: LONG WINAPI ProStatWndProc ( ! 503: HWND hWnd, ! 504: UINT uMsg, ! 505: WPARAM wParam, ! 506: LPARAM lParam) ! 507: { ! 508: LONG lRet = 1; ! 509: static int nTotalFree, nTotalCommit, nTotalReserve; ! 510: ! 511: switch (uMsg) ! 512: { ! 513: case WM_CREATE: ! 514: { ! 515: /* create buttons controls */ ! 516: CreateWindow ("button", ! 517: "Refresh", ! 518: WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, ! 519: 45, 55, 75, 25, ! 520: hWnd, ! 521: (HMENU)IDC_REFRESH, ! 522: GetModuleHandle (NULL), ! 523: NULL); ! 524: ! 525: CreateWindow ("button", ! 526: "Rewalk", ! 527: WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, ! 528: 140, 55, 75, 25, ! 529: hWnd, ! 530: (HMENU)IDM_PROCESSREWALK, ! 531: GetModuleHandle (NULL), ! 532: NULL); ! 533: ! 534: CreateWindow ("button", ! 535: "Cancel", ! 536: WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, ! 537: 235, 55, 75, 25, ! 538: hWnd, ! 539: (HMENU)IDC_CANCEL, ! 540: GetModuleHandle (NULL), ! 541: NULL); ! 542: ! 543: /* tally process statictics */ ! 544: TallyProcessStats (hWnd, &nTotalFree, &nTotalReserve, &nTotalCommit); ! 545: } ! 546: break; ! 547: ! 548: case WM_CHAR: ! 549: switch (wParam) ! 550: { ! 551: case VK_RETURN: ! 552: InvalidateRect (hWnd, NULL, TRUE); ! 553: UpdateWindow (hWnd); ! 554: break; ! 555: ! 556: case VK_ESCAPE: ! 557: DestroyWindow (hWnd); ! 558: break; ! 559: } ! 560: break; ! 561: ! 562: case WM_PAINT: ! 563: { ! 564: PAINTSTRUCT ps; ! 565: HFONT hOldFont; ! 566: char szText[100]; ! 567: ! 568: BeginPaint (hWnd, &ps); ! 569: hOldFont = SelectObject (ps.hdc, hFont); ! 570: SetBkMode (ps.hdc, TRANSPARENT); ! 571: ! 572: /* total free memory */ ! 573: wsprintf (szText, ! 574: "%19s %10luKb", ! 575: "Total free memory: ", ! 576: nTotalFree/ONE_K); ! 577: SetRect (&(ps.rcPaint), ps.rcPaint.left, 0, ps.rcPaint.right, 20); ! 578: ExtTextOut (ps.hdc, ! 579: 10, ! 580: 5, ! 581: ETO_CLIPPED, ! 582: &(ps.rcPaint), ! 583: szText, ! 584: strlen (szText), ! 585: 0); ! 586: ! 587: /* total committed memory */ ! 588: wsprintf (szText, ! 589: "%24s %10luKb", ! 590: "Total committed memory: ", ! 591: nTotalCommit/ONE_K); ! 592: SetRect (&(ps.rcPaint), ps.rcPaint.left, 20, ps.rcPaint.right, 35); ! 593: ExtTextOut (ps.hdc, ! 594: 10, ! 595: 20, ! 596: ETO_CLIPPED, ! 597: &(ps.rcPaint), ! 598: szText, ! 599: strlen (szText), ! 600: 0); ! 601: ! 602: /* total reserved memory */ ! 603: wsprintf (szText, ! 604: "%22s %10luKb", ! 605: "Total reserved memory:", ! 606: nTotalReserve/ONE_K); ! 607: SetRect (&(ps.rcPaint), ps.rcPaint.left, 35, ps.rcPaint.right, 50); ! 608: ExtTextOut (ps.hdc, ! 609: 10, ! 610: 35, ! 611: ETO_CLIPPED, ! 612: &(ps.rcPaint), ! 613: szText, ! 614: strlen (szText), ! 615: 0); ! 616: ! 617: SelectObject (ps.hdc, hOldFont); ! 618: EndPaint (hWnd, &ps); ! 619: } ! 620: break; ! 621: ! 622: case WM_COMMAND: ! 623: switch (LOWORD (wParam)) ! 624: { ! 625: case IDM_PROCESSREWALK: ! 626: { ! 627: /* send message to parent to rewalk process */ ! 628: SendMessage (GetParent (hWnd), uMsg, wParam, lParam); ! 629: ! 630: /* tally new process statistics */ ! 631: TallyProcessStats (hWnd, &nTotalFree, &nTotalReserve, &nTotalCommit); ! 632: ! 633: InvalidateRect (hWnd, NULL, TRUE); ! 634: UpdateWindow (hWnd); ! 635: } ! 636: break; ! 637: ! 638: case IDC_REFRESH: ! 639: InvalidateRect (hWnd, NULL, TRUE); ! 640: UpdateWindow (hWnd); ! 641: break; ! 642: ! 643: case IDC_CANCEL: ! 644: DestroyWindow (hWnd); ! 645: break; ! 646: } ! 647: break; ! 648: ! 649: default: ! 650: lRet = DefWindowProc (hWnd, uMsg, wParam, lParam); ! 651: } ! 652: ! 653: return lRet; ! 654: } ! 655: ! 656: ! 657: ! 658: ! 659: /* determine process statistics from existing information */ ! 660: void WINAPI TallyProcessStats ( ! 661: HWND hWnd, ! 662: int *nTotalFree, ! 663: int *nTotalReserve, ! 664: int *nTotalCommit) ! 665: { ! 666: LPVMOBJECT lpVMO = (LPVMOBJECT)lpWalkerList; ! 667: int nRegions, i; ! 668: ! 669: *nTotalFree = 0; ! 670: *nTotalCommit = 0; ! 671: *nTotalReserve = 0; ! 672: ! 673: /* determine number of memory regions by number of entries in listbox */ ! 674: nRegions = (int)SendMessage (GetWindow (GetParent (hWnd), GW_CHILD), ! 675: LB_GETCOUNT, ! 676: 0, ! 677: 0); ! 678: ! 679: /* get stats for all memory regions in process */ ! 680: for (i=0; i<nRegions; i++) ! 681: { ! 682: if (lpVMO[i].mbi.State & MEM_FREE) ! 683: *nTotalFree += lpVMO[i].mbi.RegionSize; ! 684: else if (lpVMO[i].mbi.State & MEM_COMMIT) ! 685: *nTotalCommit += lpVMO[i].mbi.RegionSize; ! 686: else ! 687: *nTotalReserve += lpVMO[i].mbi.RegionSize; ! 688: } ! 689: } ! 690: ! 691: ! 692: ! 693: ! 694: void WINAPI DrawBorders ( ! 695: HWND hWnd, ! 696: LPPAINTSTRUCT lpps) ! 697: { ! 698: POINT pt; ! 699: HPEN hOldPen; ! 700: ! 701: ! 702: ! 703: /* draw window hilites for 3D affect */ ! 704: hOldPen = SelectObject (lpps->hdc, (HPEN)GetWindowLong (hWnd, WXB_HPENHILITE)); ! 705: /* top line across window */ ! 706: MoveToEx (lpps->hdc, lpps->rcPaint.left, lpps->rcPaint.top, &pt); ! 707: LineTo (lpps->hdc, lpps->rcPaint.right, lpps->rcPaint.top); ! 708: /* bottom line in status box */ ! 709: MoveToEx (lpps->hdc, ! 710: xSTATBOX, ! 711: ySTATBOX+yChar+dyuSTATBOX+dylSTATBOX, ! 712: &pt); ! 713: LineTo (lpps->hdc, ! 714: xSTATBOX+cxSTATBOX, ! 715: ySTATBOX+yChar+dylSTATBOX+dyuSTATBOX); ! 716: /* right line in status box */ ! 717: MoveToEx (lpps->hdc, xSTATBOX+cxSTATBOX, ySTATBOX, &pt); ! 718: LineTo (lpps->hdc, ! 719: xSTATBOX+cxSTATBOX, ! 720: ySTATBOX+yChar+dylSTATBOX+dyuSTATBOX+1); ! 721: ! 722: /* draw window shadows for 3D affect */ ! 723: hOldPen = SelectObject (lpps->hdc, (HPEN)GetWindowLong (hWnd, WXB_HPENSHADOW)); ! 724: /* top line in status box */ ! 725: MoveToEx (lpps->hdc, xSTATBOX, ySTATBOX, &pt); ! 726: LineTo (lpps->hdc, xSTATBOX+cxSTATBOX+1, ySTATBOX); ! 727: /* left line in status box */ ! 728: MoveToEx (lpps->hdc, xSTATBOX, ySTATBOX, &pt); ! 729: LineTo (lpps->hdc, xSTATBOX, ySTATBOX+yChar+dylSTATBOX+dyuSTATBOX+1); ! 730: ! 731: SelectObject (lpps->hdc, hOldPen); ! 732: } ! 733: ! 734: ! 735: ! 736: ! 737: void WINAPI DrawStatusText ( ! 738: HWND hWnd, ! 739: LPPAINTSTRUCT lpps, ! 740: char *lpszText, ! 741: COLORREF crText) ! 742: { ! 743: HFONT hOldFont = SelectObject (lpps->hdc, hFont); ! 744: RECT rcStatus; ! 745: ! 746: SetBkColor (lpps->hdc, GetSysColor (COLOR_BTNFACE)); ! 747: SetTextColor (lpps->hdc, crText); ! 748: ! 749: SetRect (&rcStatus, ! 750: xSTATBOX+1, ! 751: ySTATBOX+1, ! 752: xSTATBOX+cxSTATBOX, ! 753: ySTATBOX+dylSTATBOX+dyuSTATBOX+yChar); ! 754: ! 755: ExtTextOut (lpps->hdc, ! 756: xSTATBOX+dxSTATBOX, ! 757: ySTATBOX+dyuSTATBOX, ! 758: ETO_OPAQUE | ETO_CLIPPED, ! 759: &rcStatus, ! 760: lpszText, ! 761: strlen (lpszText), ! 762: NULL); ! 763: ! 764: SelectObject (lpps->hdc, hOldFont); ! 765: } ! 766: ! 767: ! 768: ! 769: ! 770: void WINAPI SetStatusText ( ! 771: HWND hWnd, ! 772: int nIDS_STATUS, ! 773: COLORREF crText) ! 774: { ! 775: char szStatus[MAX_PATH]; ! 776: ! 777: LoadString (GetModuleHandle (NULL), nIDS_STATUS, szStatus, sizeof (szStatus)); ! 778: SendMessage (GetDlgItem (hWnd, IDC_STATUSWND), WM_SETTEXT, crText, (LONG)szStatus); ! 779: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.