Annotation of mstools/samples/sdktools/walker/pstat.c, revision 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.