Annotation of mstools/samples/sdktools/walker/pstat.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.