獲取本地主機信息類庫

#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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章