现在很多软件都有统计系统了,说好听点叫做统计用户习惯,改良产品,不好听点,呵呵,我就不说了。
核心我已经封装成类了,可以获取操作系统版本,MAC地址,本地IP地址,以及判定是否为网吧。
核心我已经封装成类了,可以获取操作系统版本,MAC地址,本地IP地址,以及判定是否为网吧。
核心代码如下:
//PCInfo.h
#pragma once
#include <string>
class CPCInfo
{
public:
CPCInfo(void);
~CPCInfo(void);
private:
// 获取MAC地址
std::string& GetMAC();
// 获取IP地址
std::string& GetIP();
// 获取操作系统
std::string& GetOS();
// 是否为网吧
bool IsInternetBar();
public:
std::string m_strIP;
std::string m_strMAC;
std::string m_strOS;
bool m_bIsInternetBar;
};
//PCInfo.cpp
#include "PCInfo.h"
#include <winsock2.h>
#include <Iphlpapi.h>
#pragma comment(lib,"Iphlpapi.lib")
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
using std::string;
void byte2Hex(unsigned char bData,unsigned char hex[])
{
int high=bData/16,low =bData %16;
hex[0] = (high <10)?('0'+high):('A'+high-10);
hex[1] = (low <10)?('0'+low):('A'+low-10);
}
bool getLocalMac1(unsigned char *mac) //获取本机MAC址
{
ULONG ulSize=0;
PIP_ADAPTER_INFO pInfo=NULL;
int temp = GetAdaptersInfo(pInfo,&ulSize);//第一处调用,获取缓冲区大小
pInfo=(PIP_ADAPTER_INFO)malloc(ulSize);
temp = GetAdaptersInfo(pInfo,&ulSize);
int iCount=0;
while(pInfo)//遍历每一张网卡
{
// pInfo->Address MAC址
for(int i=0;i<(int)pInfo->AddressLength;i++)
{
byte2Hex(pInfo->Address[i],&mac[iCount]);
iCount+=2;
if(i<(int)pInfo->AddressLength-1)
{
mac[iCount++] = ':';
}
else
{
mac[iCount++] = '#';
}
}
break;
pInfo = pInfo->Next;
}
free(pInfo);
if(iCount >0)
{
mac[--iCount]='\0';
return true;
}
else
{
return false;
}
}
//通过GetAdaptersI