#ifndef COMPUTERINFO_H
#define COMPUTERINFO_H
#include <QObject>
#include <QHostAddress>
#include <QNetworkInterface>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QSysInfo>
#include "QSettings"
#include "QDebug"
#include <QDesktopWidget>
#include <QFileInfoList>
#include <QDir>
#include <QLibrary>
#include <QTimer>
#include <QHostInfo>
#include <Windows.h>
#define GB (1000*1000*1000)
class ComputerInfo : public QObject
{
Q_OBJECT
public:
explicit ComputerInfo(QObject *parent = 0);
static const QString getLocalMachineName()
{
QString machineName = QHostInfo::localHostName();
return machineName;
}
static const QString getMac()
{
QString strMac;
QList<QNetworkInterface> netList = QNetworkInterface::allInterfaces();
foreach(QNetworkInterface item, netList)
{
if((QNetworkInterface::IsUp & item.flags()) &&
(QNetworkInterface::IsRunning & item.flags()))
{
if(strMac.isEmpty() || strMac < item.hardwareAddress())
{
strMac = item.hardwareAddress();
}
}
}
return strMac;
}
static const QString getCpuType()
{
QString strcpuDescribe;
QSettings *CPU =
new QSettings("HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",
QSettings::NativeFormat);
strcpuDescribe = CPU->value("ProcessorNameString").toString();
delete CPU;
return strcpuDescribe;
}
/*
static const QString getLANCard(){
QString dcard;
QSettings *DCard = new QSettings("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\nvlddmkm\\Device0",QSettings::NativeFormat);
QString type = DCard->value("Device Description").toString();
delete DCard;
QString dType = type;
dType.trimmed();
if(!dType.isEmpty())
dcard = dType;
DCard = new QSettings("HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\igfx\\Device0",QSettings::NativeFormat);
type = DCard->value("Device Description").toString();
delete DCard;
dType = type;
dType.trimmed();
if(!dType.isEmpty())
dcard = dcard + "\n" +dType;
DCard = new QSettings("HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\amdkmdap\\Device0",QSettings::NativeFormat);
type = DCard->value("Device Description").toString();
delete DCard;
dType = type;
dType.trimmed();
if(!dType.isEmpty())
dcard = dcard + "\n" +dType;
dcard.trimmed();
return dcard;
}
static const QString getMemory(){
float _totalMem = 0.0f;
float _freeMem = 0.0f;
QString _memDescribe;
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx(&statex);
_totalMem =(float)1.0f* statex.ullTotalPhys / GB;
_freeMem =(float)1.0f* statex.ullAvailPhys / GB;
_memDescribe = QString("可用 %1 GB / 共 %2 GB" ).
arg(QString::asprintf("%.2f", _freeMem)).arg(QString::asprintf("%.2f", _totalMem));
return _memDescribe;
}
*/
static const QString getOsVersion(){
QString _osDescirbe;
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
fnIsWow64Process(GetCurrentProcess(),&bIsWow64);
}
QString sysBit = "unknown";
if(bIsWow64)
sysBit = "64位";
else
sysBit = "32位";
_osDescirbe = QSysInfo::prettyProductName() + " " + sysBit;
return _osDescirbe;
}
static const QString getDiskInfo(){
QString _diskDescribe = "";
QFileInfoList list = QDir::drives();
foreach (QFileInfo dir, list)
{
QString dirName = dir.absolutePath();
dirName.remove("/");
LPCWSTR lpcwstrDriver = (LPCWSTR)dirName.utf16();
ULARGE_INTEGER liFreeBytesAvailable, liTotalBytes, liTotalFreeBytes;
if(GetDiskFreeSpaceEx(lpcwstrDriver, &liFreeBytesAvailable, &liTotalBytes, &liTotalFreeBytes) )
{
QString free = QString::number((double) liTotalFreeBytes.QuadPart / GB, 'f', 1);
free += "G";
QString all = QString::number((double) liTotalBytes.QuadPart / GB, 'f', 1);
all += "G";
QString str = QString("%1 %2/%3 ").arg(dirName, free, all);
_diskDescribe += str;
// double freeMem = (double) liTotalFreeBytes.QuadPart / GB;
// if(freeMem > m_maxFreeDisk)
// m_maxFreeDisk = freeMem;
}
}
return _diskDescribe;
}
static const QString getIp(){
QString strIP;
QHostInfo info = QHostInfo::fromName(ComputerInfo::getLocalMachineName());
foreach(QHostAddress address,info.addresses()){
if(address.protocol()==QAbstractSocket::IPv4Protocol){
qDebug()<<address.toString();
strIP.append(address.toString());
strIP.append("||");
}
}
return strIP;
}
static const QString getXXX(){
return "";
}
static bool ipLive()
{
QTcpSocket tcpClient;
tcpClient.abort();
tcpClient.connectToHost("202.108.22.5", 80);
//100毫秒沒有連接上則判斷不在線
return tcpClient.waitForConnected(100);
}
signals:
public slots:
};
#endif // COMPUTERINFO_H