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

📄 pviewdat.c

📁 <Win2k系统编程>源码.次数为国人自编,内容丰富,还是不错的.
💻 C
📖 第 1 页 / 共 3 页
字号:
	}
    else
        return PVIEW_PRIORITY_NORMAL;
}

//*********************************************************************
//
//      RefreshPerfData
//
//  Get a new set of performance data.  pData should be NULL initially.
//
PPERF_DATA RefreshPerfData (HKEY        hPerfKey,
                            LPTSTR      szObjectIndex,
                            PPERF_DATA  pData,
                            DWORD       *pDataSize)
{
    if (GetPerfData (hPerfKey, szObjectIndex, &pData, pDataSize) == ERROR_SUCCESS)
        return pData;
    else
        return NULL;
}
//*********************************************************************
//
//      SetProcessListText
//
//  Format the process list text.
//
void SetProcessListText (PPERF_INSTANCE pInst,
                         PPERF_COUNTER  pCPU,
                         PPERF_COUNTER  pPRIV,
                         PPERF_COUNTER  pProcID,
                         double         fTime,
                         LPTSTR         str)
{
	DWORD           *pdwProcID;
	LARGE_INTEGER   *liCPU;
	LARGE_INTEGER   *liPRIV;
	double          fCPU = 0;
	double          fPRIV = 0;
	INT             PcntPRIV = 0;
	INT             PcntUSER = 0;
	TIME_FIELD      TimeFld;
	TCHAR           szTemp[100];
    if (pCPU)
	{
        liCPU = (LARGE_INTEGER *) CounterData (pInst, pCPU);
        fCPU  = Li2Double (*liCPU);
	}
    if (pPRIV)
	{
        liPRIV = (LARGE_INTEGER *) CounterData (pInst, pPRIV);
        fPRIV  = Li2Double (*liPRIV);
	}
    if (fCPU > 0)
	{
        PcntPRIV = (INT)(fPRIV / fCPU * 100 + 0.5);
        PcntUSER = 100 - PcntPRIV;
	}

    if (pProcID)
	{
        pdwProcID = (DWORD *) CounterData (pInst, pProcID);
        wsprintf (szTemp, TEXT("%ls (%#x)"), InstanceName(pInst), *pdwProcID);
	}
    else
        wsprintf (szTemp, TEXT("%ls"), InstanceName(pInst));
    FormatTimeFields (fCPU/1.0e7, &TimeFld);
    wsprintf (str,TEXT("%s\t%3ld:%02ld:%02ld.%03ld\t%3ld%%\t%3ld%%"),
              szTemp, TimeFld.Hours,TimeFld.Mins,TimeFld.Secs,
              TimeFld.mSecs,PcntPRIV, PcntUSER);
}

//*********************************************************************
//
//      RefreshProcessList
//
//  Find all process and update the process list.
//
void RefreshProcessList (HWND           hProcessList,
                         PPERF_OBJECT   pObject)
{
	PPERF_INSTANCE  pInstance;
	TCHAR           szListText[256];
	INT             ListIndex;
	PPERF_COUNTER   pCounterCPU;
	PPERF_COUNTER   pCounterPRIV;
	PPERF_COUNTER   pCounterProcID;
	double          fObjectFreq;
	double          fObjectTime;
	double          fTime;
	INT             InstanceIndex = 0;
	INT             err;
    if (pObject)
	{
        if ((pCounterCPU    = FindCounter (pObject, PX_PROCESS_CPU))  &&
            (pCounterPRIV   = FindCounter (pObject, PX_PROCESS_PRIV)) &&
            (pCounterProcID = FindCounter (pObject, PX_PROCESS_ID)))
		{
            fObjectFreq = Li2Double (pObject->PerfFreq);
            fObjectTime = Li2Double (pObject->PerfTime);
            fTime = fObjectTime / fObjectFreq;
            pInstance = FirstInstance (pObject);
            while (pInstance && InstanceIndex < pObject->NumInstances)
			{
                SetProcessListText (pInstance,pCounterCPU,pCounterPRIV,
                          pCounterProcID,fTime,szListText);
                ListIndex = SendMessage (hProcessList, LB_ADDSTRING, 0, (DWORD)szListText);
                err = SendMessage (hProcessList, LB_SETITEMDATA, ListIndex, InstanceIndex);
                pInstance = NextInstance (pInstance);
                InstanceIndex++;
			}
		}
	}
}

//*********************************************************************
//
//      RefreshProcessData
//
//  Find data for a given process and update.
//
void RefreshProcessData    (HWND            hWnd,
                            PPERF_OBJECT    pObject,
                            DWORD           ProcessIndex)
{
	PPERF_INSTANCE  pInstance;
    if (pInstance = FindInstanceN (pObject, ProcessIndex))
	{
        PutCounterDWKB (hWnd, PVIEW_WS, pInstance, pObject, PX_PROCESS_WORKING_SET);
        SetDlgItemText (hWnd, PVIEW_TOTALPRIVATE_COMMIT, NODATA);
        // set priority
        //
        CheckRadioButton (hWnd,PVIEW_PRIORITY_HIGH,PVIEW_PRIORITY_IDL,
                          ProcessPriority (pObject, pInstance));
	}
}

//*********************************************************************
//
//      SetThreadListText
//
//  Format the thread list text.
//
void SetThreadListText (PPERF_INSTANCE  pInst,
                        PPERF_COUNTER   pCPU,
                        PPERF_COUNTER   pPRIV,
                        double          fTime,
                        LPTSTR          str)
{
	LARGE_INTEGER   *liCPU;
	LARGE_INTEGER   *liPRIV;
	double          fCPU = 0;
	double          fPRIV = 0;
	INT             PcntPRIV = 0;
	INT             PcntUSER = 0;
	TIME_FIELD      TimeFld;
	TCHAR           szTemp[100];
    if (pCPU)
	{
        liCPU = (LARGE_INTEGER *) CounterData (pInst, pCPU);
        fCPU  = Li2Double (*liCPU);
	}
    if (pPRIV)
	{
        liPRIV = (LARGE_INTEGER *) CounterData (pInst, pPRIV);
        fPRIV  = Li2Double (*liPRIV);
	}
    if (fCPU > 0)
	{
        PcntPRIV = (INT)(fPRIV / fCPU * 100 + 0.5);
        PcntUSER = 100 - PcntPRIV;
	}
    if (pInst->UniqueID != PERF_NO_UNIQUE_ID)
        wsprintf (szTemp, TEXT("%ls (%#x)"), InstanceName(pInst), pInst->UniqueID);
    else
        wsprintf (szTemp, TEXT("%ls"), InstanceName(pInst));
    FormatTimeFields (fCPU/1.0e7, &TimeFld);
    wsprintf (str,TEXT("%s\t%3ld:%02ld:%02ld.%03ld\t%3ld%%\t%3ld %%"),
              szTemp,TimeFld.Hours,TimeFld.Mins,TimeFld.Secs,
              TimeFld.mSecs,PcntPRIV,PcntUSER);
}

//*********************************************************************
//
//      RefreshThreadList
//
//  Find all threads for a given process and update the thread list.
//
void RefreshThreadList (HWND            hThreadList,
                        PPERF_OBJECT    pObject,
                        DWORD           ParentIndex)
{
	PPERF_INSTANCE  pInstance;
	TCHAR           szListText[256];
	INT             ListIndex;
	PPERF_COUNTER   pCounterCPU;
	PPERF_COUNTER   pCounterPRIV;
	double          fObjectFreq;
	double          fObjectTime;
	double          fTime;
	INT             InstanceIndex = 0;
	INT             err;
    if (pObject)
	{
        if ((pCounterCPU  = FindCounter (pObject, PX_THREAD_CPU)) &&
            (pCounterPRIV = FindCounter (pObject, PX_THREAD_PRIV)))
		{
            fObjectFreq = Li2Double (pObject->PerfFreq);
            fObjectTime = Li2Double (pObject->PerfTime);
            fTime = fObjectTime / fObjectFreq;
            pInstance = FirstInstance (pObject);
            while (pInstance && InstanceIndex < pObject->NumInstances)
			{
                if (ParentIndex == pInstance->ParentObjectInstance)
				{
                    SetThreadListText (pInstance,pCounterCPU,
                         pCounterPRIV,fTime,szListText);
                    ListIndex = SendMessage (hThreadList,LB_INSERTSTRING,
                             (WPARAM)-1,(DWORD)szListText);
                    err = SendMessage (hThreadList, LB_SETITEMDATA, ListIndex, InstanceIndex);
				}
                pInstance = NextInstance (pInstance);
                InstanceIndex++;
			}
		}
	}
}

//*********************************************************************
//
//      RefreshThreadData
//
//  Find data for a given thread and update.
//
void RefreshThreadData (HWND              hWnd,
                        PPERF_OBJECT      pThreadObj,
                        DWORD             ThreadIndex,
                        PPERF_OBJECT      pProcessObj,
                        PPERF_INSTANCE    pProcessInst)
{
	PPERF_INSTANCE  pInstance;
	PPERF_COUNTER   pCounter;
	DWORD           *pdwData;
	DWORD           *pdwProcPrio;
	BOOL            bPrioCounter = TRUE;
    if (pInstance = FindInstanceN (pThreadObj, ThreadIndex))
	{
        SetDlgItemText (hWnd, PVIEW_THREAD_PC, NODATA);
        PutCounterHEX (hWnd, PVIEW_THREAD_START,    pInstance, pThreadObj, PX_THREAD_START);
        PutCounterDW  (hWnd, PVIEW_THREAD_SWITCHES, pInstance, pThreadObj, PX_THREAD_SWITCHES);
        PutCounterDW  (hWnd, PVIEW_THREAD_DYNAMIC,  pInstance, pThreadObj, PX_THREAD_PRIO);
	}
    if (pInstance)
	{
        // get thread base priority
        //
        if (pCounter = FindCounter (pThreadObj, PX_THREAD_BASE_PRIO))
            pdwData = CounterData (pInstance, pCounter);
        else
            bPrioCounter = FALSE;
        // get process priority
        //
        if (pCounter = FindCounter (pProcessObj, PX_PROCESS_PRIO))
            pdwProcPrio = CounterData (pProcessInst, pCounter);
        else
            bPrioCounter = FALSE;
	}
    else
        bPrioCounter = FALSE;
   // set thread base priority
    //

    if (!bPrioCounter)
        CheckRadioButton (hWnd,PVIEW_THREAD_HIGHEST,
               PVIEW_THREAD_LOWEST,PVIEW_THREAD_NORMAL);
    else
	{
        switch (*pdwData - *pdwProcPrio)
		{
            case 2:
                CheckRadioButton (hWnd,
                                  PVIEW_THREAD_HIGHEST,
                                  PVIEW_THREAD_LOWEST,
                                  PVIEW_THREAD_HIGHEST);
                break;
            case 1:
                CheckRadioButton (hWnd,
                                  PVIEW_THREAD_HIGHEST,
                                  PVIEW_THREAD_LOWEST,
                                  PVIEW_THREAD_ABOVE);
                break;
            case -1:
                CheckRadioButton (hWnd,
                                  PVIEW_THREAD_HIGHEST,
                                  PVIEW_THREAD_LOWEST,
                                  PVIEW_THREAD_BELOW);
                break;
            case -2:
                CheckRadioButton (hWnd,
                                  PVIEW_THREAD_HIGHEST,
                                  PVIEW_THREAD_LOWEST,
                                  PVIEW_THREAD_LOWEST);
                break;
            case 0:
            default:
                CheckRadioButton (hWnd,
                                  PVIEW_THREAD_HIGHEST,
                                  PVIEW_THREAD_LOWEST,
                                  PVIEW_THREAD_NORMAL);
                break;
		}
	}
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -