這是菜雞的分析文章,大佬還請繞道。後續應該會慢慢的更新完!
由於技術水平有限,可能還會有分析錯誤的,還請多多指正!並且由於是一邊學習一邊記錄的所以排版也比較亂。
頭文件:
Buffer.h
CpuUsage.h
FileManagerDlg.h
FileTransferModeDlg.h
IniFile.h
InputDlg.h
IOCPServer.h
Mapper.h
Resource.h
ScreenSpyDlg.h
setting.h
SEU_QQwry.h
ShellDlg.h
SkinH.h
stdafx.h
SystemDlg.h
targetver.h
TrueColorToolBar.h
老狼ghost2.h
老狼ghost2Dlg.h
源文件:
Buffer.cpp
CpuUsage.cpp
FileManagerDlg.cpp
FileTransferModeDlg.cpp
IniFile.cpp
InputDlg.cpp
IOCPServer.cpp
ScreenSpyDlg.cpp
setting.cpp
SEU_QQwry.cpp
ShellDlg.cpp
stdafx.cpp
SystemDlg.cpp
TrueColorToolBar.cpp
老狼ghost2.cpp
老狼ghost2Dlg.cpp
// CpuUsage.h: interface for the CCpuUsage class.
// CCpuUsage類的接口
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CPUUSAGE_H__60CF4F03_9F01_41E8_A9FB_51F065D5F3C2__INCLUDED_)
#define AFX_CPUUSAGE_H__60CF4F03_9F01_41E8_A9FB_51F065D5F3C2__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/*
所有Performance Data Helper(PDH)函數都返回PDH_STATUS類型的值。如果函數成功,則返回值爲ERROR_SUCCESS。否則,該函數將返回系統錯誤代碼或PDH錯誤代碼。
*/
#include <pdh.h> //用來獲取CPU的使用率 在使用pdh 庫之前,我們需要包含相應的頭文件和加載相應的庫:
#include <pdhmsg.h> //表示錯誤狀態
#pragma comment(lib,"PDH.lib") //加載與PDH相應的庫
#define MAX_RAW_VALUES 20
const char szCounterName[]="\\Processor(_Total)\\% Processor Time";
typedef struct _tag_PDHCounterStruct {//定義結構
HCOUNTER hCounter; // Handle to the counter - given to use by PDH Library
//給PDH庫使用的計數器的句柄
//HCOUNTER-->HANDLE 其實就是句柄
/*
Windows下使用PDH來獲取CPU的使用率
//data type definitions 數據類型定義
typedef HANDLE PDH_HCOUNTER; 定義別名
typedef HANDLE PDH_HQUERY; 定義別名
typedef HANDLE PDH_HLOG; 定義別名
typedef PDH_HCOUNTER HCOUNTER; 定義別名
typedef PDH_HQUERY HQUERY; 定義別名
*/
int nNextIndex;
// element to get the next raw value
//元素獲取下一個原始值
int nOldestIndex;
// element containing the oldes raw value
//元素,其中包含舊的原始值
int nRawCount;
// number of elements containing raw values
//包含原始值的元素數量
PDH_RAW_COUNTER a_RawValue[MAX_RAW_VALUES];
// Ring buffer to contain raw values 循環緩衝區包含原始值
/*
typedef struct _PDH_RAW_COUNTER {
volatile DWORD CStatus;
//指示計數器是否有效的計算器狀態。在計算中使用數據或顯示其值之前,請檢查此成員
FILETIME TimeStamp;
//收集數據的本地時間,格式爲FILETIME
LONGLONG FirstValue;
//第一個原始計算器值
LONGLONG SecondValue;
//第二個原始計算器的值。速率計算器需要兩個值才能計算出可顯示的值
DWORD MultiCount;
//如果計算器類型包含PERF_MULTI_COUNTER標誌,則此成員包含計算中使用的其它計數器數據
} PDH_RAW_COUNTER, * PPDH_RAW_COUNTER;
*/
} PDHCOUNTERSTRUCT, *PPDHCOUNTERSTRUCT;
class CCpuUsage
{
public:
CCpuUsage();
virtual ~CCpuUsage();
BOOL Init();
int GetUsage();
protected:
PPDHCOUNTERSTRUCT m_pCounterStruct;
HQUERY m_hQuery;
};
#endif // !defined(AFX_CPUUSAGE_H__60CF4F03_9F01_41E8_A9FB_51F065D5F3C2__INCLUDED_)