?? 1-4.cpp
字號(hào):
// proclist項(xiàng)目
# include <windows.h>
# include <tlhelp32.h>
# include <iostream.h>
// 當(dāng)在用戶模式機(jī)內(nèi)核模式下都提供所耗時(shí)間時(shí),在內(nèi)核模式下進(jìn)行所耗時(shí)間的64位計(jì)算的幫助方法
DWORD GetKernelModePercentage(const FILETIME& ftKernel,
const FILETIME& ftUser)
{
// 將FILETIME結(jié)構(gòu)轉(zhuǎn)化為64位整數(shù)
ULONGLONG qwKernel=(((ULONGLONG)ftKernel.dwHighDateTime)
<<32)+ftKernel.dwLowDateTime;
ULONGLONG qwUser=(((ULONGLONG)ftUser.dwHighDateTime)
<<32)+ftUser.dwLowDateTime;
// 將消耗時(shí)間相加,然后計(jì)算消耗在內(nèi)核模式下的時(shí)間百分比
ULONGLONG qwTotal=qwKernel+qwUser;
DWORD dwPct=(DWORD)(((ULONGLONG)100*qwKernel)/qwTotal);
return(dwPct);
}
// 以下是將當(dāng)前運(yùn)行過(guò)程名和消耗在內(nèi)核模式下的時(shí)間百分?jǐn)?shù)都顯示出來(lái)的應(yīng)用程序
void main()
{
// 對(duì)當(dāng)前系統(tǒng)中運(yùn)行的過(guò)程拍取“快照”
HANDLE hSnapshot=::CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, // 提取當(dāng)前過(guò)程
0); // 如果是當(dāng)前過(guò)程,就將其忽略
// 初始化過(guò)程入口
PROCESSENTRY32 pe;
::ZeroMemory(&pe,sizeof(pe));
pe.dwSize=sizeof(pe);
BOOL bMore=::Process32First(hSnapshot,&pe);
while(bMore)
{
// 打開(kāi)用于讀取的過(guò)程
HANDLE hProcess=::OpenProcess(
PROCESS_QUERY_INFORMATION, // 指明要得到信息
FALSE, // 不必繼承這一句柄
pe.th32ProcessID); // 要打開(kāi)的進(jìn)程
if (hProcess!=NULL)
{
// 找出進(jìn)程的時(shí)間
FILETIME ftCreation,ftKernelMode,ftUserMode,ftExit;
::GetProcessTimes(
hProcess, // 所感興趣的進(jìn)程
&ftCreation, // 進(jìn)程的啟動(dòng)時(shí)間
&ftExit, // 結(jié)束時(shí)間 (如果有的話)
&ftKernelMode, // 在內(nèi)核模式下消耗的時(shí)間
&ftUserMode); // 在用戶模式下消耗的時(shí)間
// 計(jì)算內(nèi)核模式消耗的時(shí)間百分比
DWORD dwPctKernel=::GetKernelModePercentage(
ftKernelMode, // 在內(nèi)核模式上消耗的時(shí)間
ftUserMode); // 在用戶模式下消耗的時(shí)間
// 向用戶顯示進(jìn)程的某些信息
cout<< "process ID: " << pe.th32ProcessID
<< ",EXE file:" << pe.szExeFile
<< ",% in Kernel mode: " << dwPctKernel << endl;
// 消除句柄
::CloseHandle(hProcess);
}
// 轉(zhuǎn)向下一個(gè)進(jìn)程
bMore=::Process32Next(hSnapshot,&pe);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -