|
|
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.