#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") ); QAxObject* returnList = objWMIService->querySubObject("ExecQuery(QString&)", QString("SELECT * FROM Win32_ComputerSystem") ); QAxObject *enum1 = returnList->querySubObject("_NewEnum"); //ui->textBrowser_4->setHtml(enum1->generateDocumentation()); IEnumVARIANT* enumInterface = 0; enum1->queryInterface(IID_IEnumVARIANT, (void**)&enumInterface); //ui->textBrowser_4->setHtml(enumInterface->); enumInterface->Reset(); // QAxObject *item = 0; //qDebug()<<"the count of objinterlist is "<dynamicCall("Count").toInt()); for (int i = 0; i < returnList->dynamicCall("Count").toInt(); i++) { VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT)); if (enumInterface->Next(1,theItem,NULL) != S_FALSE){ QAxObject *item = new QAxObject((IUnknown *)theItem->punkVal); if(item){ qDebug() <<" string is "<dynamicCall("ProcessorId").toString(); qDebug() <<" string is "<dynamicCall("GetText_(WbemObjectTextFormatEnum)", QVariant(1)).toString(); } // item-> //QString val = qDebug()<<"item name is "<< item->property("objectName").toString(); } } 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; }