亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mfnettraffic.cpp

?? 查看網絡流量的Visual C++源代碼
?? CPP
字號:
/*******************************************

	MFTrafficButton

	Version:	1.0
	Date:		31.10.2001
	Author:		Michael Fatzi
	Mail:		Michael_Fatzi@hotmail.com
	Copyright 1996-1997, Keith Rule

	You may freely use or modify this code provided this
	Copyright is included in all derived versions.
	
	History: 10.2001 Startup

	Handy little button control to display current 
	nettraffic as graph in a button.

********************************************/

// MFNetTraffic.cpp: implementation of the MFNetTraffic class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MFNetTraffic.h"
#include "float.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#include "winperf.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

MFNetTraffic::MFNetTraffic()
{
	lasttraffic = 0.0;
	CurrentInterface = -1;
	CurrentTrafficType = AllTraffic;
	GetInterfaces();
}

MFNetTraffic::~MFNetTraffic()
{
	
}

// Little helper functions
// Found them on CodeGuru, but do not know who has written them originally

PERF_OBJECT_TYPE *FirstObject(PERF_DATA_BLOCK *dataBlock)
{
  return (PERF_OBJECT_TYPE *) ((BYTE *)dataBlock + dataBlock->HeaderLength);
}

PERF_OBJECT_TYPE *NextObject(PERF_OBJECT_TYPE *act)
{
  return (PERF_OBJECT_TYPE *) ((BYTE *)act + act->TotalByteLength);
}

PERF_COUNTER_DEFINITION *FirstCounter(PERF_OBJECT_TYPE *perfObject)
{
  return (PERF_COUNTER_DEFINITION *) ((BYTE *) perfObject + perfObject->HeaderLength);
}

PERF_COUNTER_DEFINITION *NextCounter(PERF_COUNTER_DEFINITION *perfCounter)
{
  return (PERF_COUNTER_DEFINITION *) ((BYTE *) perfCounter + perfCounter->ByteLength);
}

PERF_COUNTER_BLOCK *GetCounterBlock(PERF_INSTANCE_DEFINITION *pInstance)
{
  return (PERF_COUNTER_BLOCK *) ((BYTE *)pInstance + pInstance->ByteLength);
}

PERF_INSTANCE_DEFINITION *FirstInstance (PERF_OBJECT_TYPE *pObject)
{
  return (PERF_INSTANCE_DEFINITION *)  ((BYTE *) pObject + pObject->DefinitionLength);
}

PERF_INSTANCE_DEFINITION *NextInstance (PERF_INSTANCE_DEFINITION *pInstance)
{
  // next instance is after
  //    this instance + this instances counter data

  PERF_COUNTER_BLOCK  *pCtrBlk = GetCounterBlock(pInstance);

  return (PERF_INSTANCE_DEFINITION *) ((BYTE *)pInstance + pInstance->ByteLength + pCtrBlk->ByteLength);
}

char *WideToMulti(wchar_t *source, char *dest, int size)
{
  WideCharToMultiByte(CP_ACP, 0, source, -1, dest, size, 0, 0);

  return dest;
}

/*
	returns the traffic of given interface
*/
double MFNetTraffic::GetTraffic(int interfaceNumber)
{
	try
	{
#define DEFAULT_BUFFER_SIZE 40960L
		
		POSITION pos;
		CString InterfaceName;
		pos = Interfaces.FindIndex(interfaceNumber);
		if(pos==NULL)
			return 0.0;
		InterfaceName = Interfaces.GetAt(pos);
		
		
		// buffer for performance data
		unsigned char *data = new unsigned char [DEFAULT_BUFFER_SIZE];
		// return value from RegQueryValueEx: ignored for this application
		DWORD type;
		// Buffer size
		DWORD size = DEFAULT_BUFFER_SIZE;
		// return value of RegQueryValueEx
		DWORD ret;
		
		// request performance data from network object (index 510) 
		while((ret = RegQueryValueEx(HKEY_PERFORMANCE_DATA, "510", 0, &type, data, &size)) != ERROR_SUCCESS) {
			if(ret == ERROR_MORE_DATA) 
			{
				// buffer size was too small, increase allocation size
				size += DEFAULT_BUFFER_SIZE;
				
				delete [] data;
				data = new unsigned char [size];
			} 
			else 
			{
				// some unspecified error has occured
				return 1;
			}
		}
		
		PERF_DATA_BLOCK *dataBlockPtr = (PERF_DATA_BLOCK *)data;
		
		// enumerate first object of list
		PERF_OBJECT_TYPE *objectPtr = FirstObject(dataBlockPtr);
		
		// trespassing the list 
		for(int a=0 ; a<(int)dataBlockPtr->NumObjectTypes ; a++) 
		{
			char nameBuffer[255];
			
			// did we receive a network object?
			if(objectPtr->ObjectNameTitleIndex == 510) 
			{
				// Calculate the offset
				DWORD processIdOffset = ULONG_MAX;
				
				// find first counter 
				PERF_COUNTER_DEFINITION *counterPtr = FirstCounter(objectPtr);
				
				// walking trough the list of objects
				for(int b=0 ; b<(int)objectPtr->NumCounters ; b++) 
				{
					// Check if we received datatype wished
					if((int)counterPtr->CounterNameTitleIndex == CurrentTrafficType)
						processIdOffset = counterPtr->CounterOffset;
					
					// watch next counter
					counterPtr = NextCounter(counterPtr);
				}
				
				if(processIdOffset == ULONG_MAX) {
					delete [] data;
					return 1;
				}
				
				
				// Find first instance
				PERF_INSTANCE_DEFINITION *instancePtr = FirstInstance(objectPtr);
				
				DWORD fullTraffic;
				DWORD traffic;
				for(b=0 ; b<objectPtr->NumInstances ; b++) 
				{
					// evaluate pointer to name
					wchar_t *namePtr = (wchar_t *) ((BYTE *)instancePtr + instancePtr->NameOffset);
					
					// get PERF_COUNTER_BLOCK of this instance
					PERF_COUNTER_BLOCK *counterBlockPtr = GetCounterBlock(instancePtr);
					
					// now we have the interface name
					
					char *pName = WideToMulti(namePtr, nameBuffer, sizeof(nameBuffer));
					CString iName;
					iName.Format("%s",pName);
				
					POSITION pos = TotalTraffics.FindIndex(b);
					if(pos!=NULL)
					{
						fullTraffic = *((DWORD *) ((BYTE *)counterBlockPtr + processIdOffset));
						TotalTraffics.SetAt(pos,fullTraffic);
					}

					// If the interface the currently selected interface?
					if(InterfaceName == iName)
					{
						traffic = *((DWORD *) ((BYTE *)counterBlockPtr + processIdOffset));
						double acttraffic = (double)traffic;
						double trafficdelta;
						// Do we handle a new interface (e.g. due a change of the interface number
						if(CurrentInterface != interfaceNumber)
						{
							lasttraffic = acttraffic;
							trafficdelta = 0.0;
							CurrentInterface = interfaceNumber;
						}
						else
						{
							trafficdelta = acttraffic - lasttraffic;
							lasttraffic = acttraffic;
						}
						delete [] data;
						return(trafficdelta);
					}
					
					// next instance
					instancePtr = NextInstance(instancePtr);
				}
			}
			
			// next object in list
			objectPtr = NextObject(objectPtr);
		}
		
		delete [] data;
		return 0;
	}

	catch(...)
	{
		return 0;
	}
}

/*
	Enumerate installed interfaces. 
	See comments above
*/
BOOL MFNetTraffic::GetInterfaces()
{
	try
	{
#define DEFAULT_BUFFER_SIZE 40960L
		
		Interfaces.RemoveAll();
		unsigned char *data = (unsigned char*)malloc(DEFAULT_BUFFER_SIZE);
		DWORD type;
		DWORD size = DEFAULT_BUFFER_SIZE;
		DWORD ret;
		
		char s_key[4096];
		sprintf( s_key , "%d" , 510 );
		
		while((ret = RegQueryValueEx(HKEY_PERFORMANCE_DATA, s_key, 0, &type, data, &size)) != ERROR_SUCCESS) {
			while(ret == ERROR_MORE_DATA) 
			{
				size += DEFAULT_BUFFER_SIZE;
				data = (unsigned char*) realloc(data, size);
			} 
			if(ret != ERROR_SUCCESS)
			{
				return FALSE;
			}
		}
		
		PERF_DATA_BLOCK	 *dataBlockPtr = (PERF_DATA_BLOCK *)data;
		PERF_OBJECT_TYPE *objectPtr = FirstObject(dataBlockPtr);
		
		for(int a=0 ; a<(int)dataBlockPtr->NumObjectTypes ; a++) 
		{
			char nameBuffer[255];
			if(objectPtr->ObjectNameTitleIndex == 510) 
			{
				DWORD processIdOffset = ULONG_MAX;
				PERF_COUNTER_DEFINITION *counterPtr = FirstCounter(objectPtr);
				
				for(int b=0 ; b<(int)objectPtr->NumCounters ; b++) 
				{
					if(counterPtr->CounterNameTitleIndex == 520)
						processIdOffset = counterPtr->CounterOffset;
					
					counterPtr = NextCounter(counterPtr);
				}
				
				if(processIdOffset == ULONG_MAX) {
					free(data);
					return 1;
				}
				
				PERF_INSTANCE_DEFINITION *instancePtr = FirstInstance(objectPtr);
				
				for(b=0 ; b<objectPtr->NumInstances ; b++) 
				{
					wchar_t *namePtr = (wchar_t *) ((BYTE *)instancePtr + instancePtr->NameOffset);
					PERF_COUNTER_BLOCK *counterBlockPtr = GetCounterBlock(instancePtr);
					char *pName = WideToMulti(namePtr, nameBuffer, sizeof(nameBuffer));
					DWORD bandwith = *((DWORD *) ((BYTE *)counterBlockPtr + processIdOffset));				
					DWORD tottraff = 0;

					Interfaces.AddTail(CString(pName));
					Bandwidths.AddTail(bandwith);
					TotalTraffics.AddTail(tottraff);  // initial 0, just for creating the list
					
					instancePtr = NextInstance(instancePtr);
				}
			}
			objectPtr = NextObject(objectPtr);
		}
		free(data);
		
		return TRUE;
	}
	catch(...)
	{
		return FALSE;
	}
}

/*
	Returns the count of installed interfaces
*/
int MFNetTraffic::GetNetworkInterfacesCount()
{
	return Interfaces.GetCount()-1;
}

/*
	Returns the name of the given interface (-number)
*/
BOOL MFNetTraffic::GetNetworkInterfaceName(CString *InterfaceName, int index)
{
	POSITION pos = Interfaces.FindIndex(index);
	if(pos==NULL)
		return FALSE;

	InterfaceName->Format("%s",Interfaces.GetAt(pos));
	return TRUE;
}

/*
	Returns bandwith of interface e.g. 100000 for 100MBit
*/
DWORD MFNetTraffic::GetInterfaceBandwidth(int index)
{
	POSITION pos = Bandwidths.FindIndex(index);
	if(pos==NULL)
		return 0;

	else 
		return Bandwidths.GetAt(pos) / 8;

}

/*
	Sometime it is nice to know, how much traffic has a specific interface sent and received
*/

DWORD MFNetTraffic::GetInterfaceTotalTraffic(int index)
{
	DWORD		totaltraffic = 0;
	POSITION	pos;
	pos= TotalTraffics.FindIndex(index);
	if(pos!=NULL)
	{
		totaltraffic = TotalTraffics.GetAt(pos); 
		if(totaltraffic == 0.0)
		{
			GetTraffic(index);
			pos= TotalTraffics.FindIndex(index);
			if(pos!=NULL)
			{
				totaltraffic = TotalTraffics.GetAt(pos); 
			}
		}
	}

	return(totaltraffic);
}

/*
	To prevent direct manipulation of member variables....
*/
void MFNetTraffic::SetTrafficType(int trafficType)
{
	CurrentTrafficType = trafficType;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区视频在线观看| 在线不卡欧美精品一区二区三区| 一区二区三区在线免费播放| 日韩精品最新网址| 老色鬼精品视频在线观看播放| 日韩欧美在线不卡| 91欧美激情一区二区三区成人| 美女视频黄 久久| 亚洲免费观看视频| 国产欧美日韩激情| 欧美日韩高清一区| 99精品欧美一区| 国产美女娇喘av呻吟久久| 天堂一区二区在线免费观看| 日韩一区中文字幕| 久久一留热品黄| 69堂成人精品免费视频| 色综合久久综合| 丁香亚洲综合激情啪啪综合| 美女视频免费一区| 亚洲成人在线观看视频| 中文字幕一区二区三区视频 | 国产aⅴ精品一区二区三区色成熟| 亚洲一区二区在线视频| 中文字幕在线不卡视频| 久久久精品tv| 欧美精品一区二区三区在线| 91麻豆精品国产综合久久久久久| 在线视频观看一区| 91美女蜜桃在线| a在线欧美一区| 丁香一区二区三区| 国产a视频精品免费观看| 国产精品一区在线观看乱码| 久久99九九99精品| 日韩vs国产vs欧美| 天天综合日日夜夜精品| 亚洲国产成人tv| 亚洲狼人国产精品| 亚洲精品亚洲人成人网| 一区在线观看免费| 国产日韩精品一区二区三区| 国产午夜亚洲精品理论片色戒| 精品国产免费一区二区三区香蕉| 欧美变态tickling挠脚心| 制服.丝袜.亚洲.中文.综合| 欧美一区中文字幕| 欧美精品777| 91精品在线观看入口| 欧美一区二区三区在线电影| 91精品国产色综合久久久蜜香臀| 欧美区一区二区三区| 欧美二区在线观看| 欧美一区二区三区成人| 日韩精品专区在线影院观看 | 国产午夜亚洲精品午夜鲁丝片| 久久综合久久鬼色| 欧美高清在线视频| 亚洲人成电影网站色mp4| 亚洲一区二区三区四区在线观看| 亚洲高清一区二区三区| 久久国产精品免费| 国产精品一二三区在线| 不卡av在线网| 欧美日韩成人综合天天影院| 制服丝袜激情欧洲亚洲| 久久精品欧美一区二区三区不卡 | 成人精品gif动图一区| av中文字幕不卡| 欧美日韩精品专区| 欧美tickling网站挠脚心| 欧美国产一区二区在线观看| 亚洲制服丝袜av| 蜜臀av国产精品久久久久| 懂色av一区二区三区蜜臀 | 2021中文字幕一区亚洲| 国产精品高清亚洲| 午夜亚洲国产au精品一区二区| 国内成人自拍视频| 色婷婷综合五月| 欧美大片在线观看| 综合久久给合久久狠狠狠97色| 亚洲成人免费影院| 国产一区二区在线观看免费 | 久久综合999| 亚洲免费观看高清在线观看| 美腿丝袜在线亚洲一区| 99re亚洲国产精品| 日韩一区二区电影在线| 国产精品久久毛片| 美国一区二区三区在线播放| 91丝袜高跟美女视频| 26uuu国产电影一区二区| 一区二区欧美国产| 国产真实乱对白精彩久久| 欧美三区在线观看| 中文字幕免费一区| 日日欢夜夜爽一区| 99国产欧美另类久久久精品| 日韩欧美国产系列| 亚洲一区二区三区影院| 成人av资源网站| 欧美一区二区视频在线观看2022| 亚洲国产高清在线| 激情综合色丁香一区二区| 欧美性三三影院| 国产精品成人在线观看 | 色综合久久中文综合久久97| 久久久青草青青国产亚洲免观| 亚洲成年人影院| 99久久99久久精品国产片果冻| 精品动漫一区二区三区在线观看| 亚洲成在人线免费| av在线不卡网| 国产日韩欧美精品综合| 狂野欧美性猛交blacked| 欧美四级电影在线观看| 亚洲黄色在线视频| 国产91富婆露脸刺激对白| 精品国产电影一区二区| 麻豆成人免费电影| 91精品国产综合久久婷婷香蕉| 自拍偷拍亚洲综合| av中文字幕在线不卡| 国产精品高潮呻吟久久| 成人综合在线观看| 久久精品夜色噜噜亚洲aⅴ| 天天色天天操综合| 欧美三级乱人伦电影| 一区二区三区在线观看欧美| 99热国产精品| 中文字幕一区二区三区视频 | 欧美三级电影一区| 一区二区成人在线观看| 色欧美日韩亚洲| 亚洲乱码日产精品bd| 91蝌蚪国产九色| 亚洲视频在线观看三级| 色综合天天狠狠| 亚洲欧美日韩中文播放| 色综合久久久久久久久| 亚洲精品国产视频| 精品视频1区2区| 午夜视频久久久久久| 日韩一区二区在线播放| 免费成人深夜小野草| 精品久久免费看| 国产精品12区| 国产精品美女久久久久久久| 成人高清免费观看| 一区二区三区 在线观看视频| 欧美日韩国产小视频| 日韩电影免费在线| 精品久久久久久久久久久久久久久| 狠狠久久亚洲欧美| 中文字幕中文字幕一区二区 | 久久亚洲综合色一区二区三区| 国产在线不卡视频| 国产精品久久久久久久久动漫| 99精品久久免费看蜜臀剧情介绍| 亚洲精品欧美专区| 欧美日韩黄色影视| 国产一区二区三区在线观看免费视频 | 久久久久久久久久久久久夜| 成人av在线影院| 亚洲精品亚洲人成人网| 欧美一区二区视频在线观看 | 日日夜夜免费精品| 久久久亚洲精品一区二区三区| 国产成人日日夜夜| 亚洲精品乱码久久久久久日本蜜臀| 欧美日韩欧美一区二区| 国产在线乱码一区二区三区| 亚洲欧美日韩成人高清在线一区| 欧美性猛交xxxxxx富婆| 精品一区二区三区蜜桃| 中文字幕中文在线不卡住| 欧美一区二区三区免费视频| 国产成人av一区二区| 亚洲一级电影视频| 久久九九久久九九| 欧美性videosxxxxx| 国产精品99久久久| 香蕉乱码成人久久天堂爱免费| 久久久久9999亚洲精品| 欧美日韩视频一区二区| 国产1区2区3区精品美女| 亚洲国产精品嫩草影院| 欧美激情在线看| 欧美精品久久久久久久多人混战| 福利一区二区在线观看| 日韩不卡免费视频| 最新成人av在线| 欧美大片在线观看一区二区| 日本韩国欧美一区| 国产福利91精品| 日本女人一区二区三区| 亚洲人妖av一区二区| 久久人人97超碰com| 欧美猛男男办公室激情|