#include "cacic_hardware.h" cacic_hardware::cacic_hardware() { } void cacic_hardware::iniciaColeta() { #ifdef Q_OS_WIN this->coletaHardware = coletaWin(); #elif defined(Q_OS_LINUX) this->coletaHardware = coletaLinux(); #endif } #ifdef Q_OS_WIN QJsonObject cacic_hardware::coletaWin() { QAxObject *objIWbemLocator = new QAxObject("WbemScripting.SWbemLocator"); QAxObject *objWMIService = objIWbemLocator->querySubObject("ConnectServer(QString&,QString&)",QString("."),QString("root\\cimv2")); if (objWMIService->isNull()) { return QJsonObject(); } QAxObject *returnList = objWMIService->querySubObject("ExecQuery(QString&)",QString("select SystemType from win32_computersystem")); QAxObject *enum1 = returnList->querySubObject("_NewEnum"); IEnumVARIANT* enumInterface; //to get this, include enum1->queryInterface(IID_IEnumVARIANT, (void**)&enumInterface); enumInterface->Reset(); //start at the beginning of the list. for (int i=0;idynamicCall("Count").toInt();i++){ VARIANT *theItem; enumInterface->Next(1,theItem,NULL); QAxObject *item = new QAxObject((IUnknown *)theItem->punkVal); qDebug() << item->dynamicCall("Caption"); } return QJsonObject(); } #elif Q_OS_LINUX QJsonObject cacic_hardware::coletaLinux() { OperatingSystem operatingSystem; ConsoleObject console; QJsonObject hardware; QFile lshwFile("lshwJson.json"); if( lshwFile.exists() ) lshwFile.remove(); console("lshw -json >> lshwJson.json"); QJsonObject lshwJson = oCacic.getJsonFromFile("lshwJson.json")["children"].toArray().first().toObject(); if( lshwJson.contains("id") && lshwJson["id"] == QJsonValue::fromVariant(QString("core")) ) { if ( lshwJson["children"].isArray() ){ // qDebug() << "IS ARRAY!!"; QJsonArray componentsArray = lshwJson["children"].toArray(); foreach(QJsonValue componentValue, componentsArray ) { QJsonObject component = componentValue.toObject(); /* TODO: * - Formatar direito as quantidades (memória,clock do cpu) * com unidades mais amigáveis para humanos em todos métodos. * * coletaLinuxMem * coletaLinuxCpu * coletaLinuxPci */ if( component["id"] == QJsonValue::fromVariant(QString("memory")) ) { coletaLinuxMem(hardware,component); } else if ( component["id"] == QJsonValue::fromVariant(QString("cpu")) ) { coletaLinuxCpu(hardware,component); } else if ( component["id"] == QJsonValue::fromVariant(QString("pci")) ) { QJsonArray pciArray = component["children"].toArray(); foreach(QJsonValue pciValue, pciArray){ QJsonObject pciObject = pciValue.toObject(); coletaLinuxPci(hardware, pciObject); } } } } } return hardware; } void cacic_hardware::coletaLinuxMem(QJsonObject &hardware, const QJsonObject &component) { QJsonObject memory; memory["size"] = QJsonValue::fromVariant(oCacic.convertDouble(component["size"].toDouble(),0) + " bytes"); hardware["memory"] = memory; } void cacic_hardware::coletaLinuxCpu(QJsonObject &hardware, const QJsonObject &component) { QJsonObject cpu; cpu["name"] = component["product"]; cpu["vendor"] = component["vendor"]; cpu["clock"] = QJsonValue::fromVariant(oCacic.convertDouble(component["capacity"].toDouble(),0) + " Hz"); hardware["cpu"] = cpu; } void cacic_hardware::coletaLinuxPci(QJsonObject &hardware, const QJsonObject &pciJson) { QJsonObject pciMember; if ( pciJson["id"] == QJsonValue::fromVariant(QString("multimedia")) ) { pciMember["description"] = pciJson["description"]; pciMember["product"] = pciJson["product"]; pciMember["vendor"] = pciJson["vendor"]; hardware["multimedia"] = pciMember; } else if (pciJson["id"].toString().contains("pci:") ) { QJsonArray pciChildren = pciJson["children"].toArray(); foreach( QJsonValue pciChild, pciChildren ) { QJsonObject pciChildJson = pciChild.toObject(); if( pciChildJson["id"] == QJsonValue::fromVariant(QString("network")) && ( pciChildJson["description"].toString().contains("Wireless") || pciChildJson["product"].toString().contains("Wireless") )) { pciMember["description"] = pciChildJson["description"]; pciMember["product"] = pciChildJson["product"]; pciMember["vendor"] = pciChildJson["vendor"]; pciMember["logicalname"] = pciChildJson["logicalname"]; pciMember["serial"] = pciChildJson["serial"]; pciMember["firmware"] = pciChildJson["configuration"].toObject()["firmware"]; hardware["wireless_card"] = pciMember; } else if( pciChildJson["id"] == QJsonValue::fromVariant(QString("network")) ) { pciMember["description"] = pciChildJson["description"]; pciMember["product"] = pciChildJson["product"]; pciMember["vendor"] = pciChildJson["vendor"]; pciMember["logicalname"] = pciChildJson["logicalname"]; pciMember["serial"] = pciChildJson["serial"]; pciMember["capacity"] = QJsonValue::fromVariant( oCacic.convertDouble(pciChildJson["capacity"].toDouble(), 0) + " bits/s" ); hardware["ethernet_card"] = pciMember; } } } } #endif QJsonObject cacic_hardware::toJsonObject() { return coletaHardware; }