Commit d6cd8f135e7c62b68af86e98f0108224d795e41e
1 parent
78a93534
Exists in
master
Classe wmi
Showing
15 changed files
with
202 additions
and
188 deletions
Show diff stats
cacic-teste/cacic-teste.pro
| ... | ... | @@ -29,6 +29,7 @@ SOURCES += \ |
| 29 | 29 | ../src/vqtconvert.cpp \ |
| 30 | 30 | ../src/vregistry.cpp \ |
| 31 | 31 | ../src/ccoleta.cpp \ |
| 32 | + ../src/wmi.cpp \ | |
| 32 | 33 | # ../src/qtservice/src/qtservice.cpp \ |
| 33 | 34 | # ../src/qtservice/src/qtservice_unix.cpp \ |
| 34 | 35 | # ../src/qtservice/src/qtservice_win.cpp \ |
| ... | ... | @@ -48,6 +49,7 @@ HEADERS += \ |
| 48 | 49 | ../src/vqtconvert.h \ |
| 49 | 50 | ../src/vregistry.h \ |
| 50 | 51 | ../src/ccoleta.h \ |
| 52 | + ../src/wmi.h \ | |
| 51 | 53 | # ../src/qtservice/src/qtservice.h \ |
| 52 | 54 | # ../src/qtservice/src/qtservice_p.h \ |
| 53 | 55 | # ../src/qtservice/src/qtunixserversocket.h \ | ... | ... |
cacicD/cacicD.pro
cacicD/cacicd.cpp
| ... | ... | @@ -4,7 +4,7 @@ cacicD::cacicD(int argc, char **argv) : QtService<QCoreApplication>(argc, argv, |
| 4 | 4 | { |
| 5 | 5 | try{ |
| 6 | 6 | setServiceDescription("Cacic Daemon"); |
| 7 | - setServiceFlags(QtServiceBase::CannotBeStopped); | |
| 7 | + setServiceFlags(QtService::Default); | |
| 8 | 8 | } catch (...){ |
| 9 | 9 | qCritical() << "Error desconhecido no construtor."; |
| 10 | 10 | } | ... | ... |
gercols/gercols.pro
| ... | ... | @@ -34,6 +34,7 @@ SOURCES += \ |
| 34 | 34 | ./gercols.cpp \ |
| 35 | 35 | ../src/vregistry.cpp \ |
| 36 | 36 | ../src/vqtconvert.cpp \ |
| 37 | + ../src/wmi.cpp \ | |
| 37 | 38 | |
| 38 | 39 | HEADERS += \ |
| 39 | 40 | ../src/ccacic.h \ |
| ... | ... | @@ -46,6 +47,7 @@ HEADERS += \ |
| 46 | 47 | ./gercols.h \ |
| 47 | 48 | ../src/vregistry.h \ |
| 48 | 49 | ../src/vqtconvert.h \ |
| 50 | + ../src/wmi.h \ | |
| 49 | 51 | |
| 50 | 52 | INCLUDEPATH += ../src \ |
| 51 | 53 | ../src/crypto++/include/ | ... | ... |
gercols/main.cpp
install-cacic/install-cacic.pro.user
src/cacic_computer.cpp
| ... | ... | @@ -14,11 +14,11 @@ CACIC_Computer::CACIC_Computer() |
| 14 | 14 | * |
| 15 | 15 | */ |
| 16 | 16 | QList<QVariantMap> CACIC_Computer::networkInterfacesRunning(){ |
| 17 | - QNetworkInterface interface; | |
| 17 | + QNetworkInterface netInterface; | |
| 18 | 18 | QVariantMap mapInterface; |
| 19 | 19 | QList<QVariantMap> listaMap; |
| 20 | 20 | |
| 21 | - foreach (QNetworkInterface in, interface.allInterfaces()) { | |
| 21 | + foreach (QNetworkInterface in, netInterface.allInterfaces()) { | |
| 22 | 22 | if (!(bool)(in.flags() & QNetworkInterface::IsLoopBack) && |
| 23 | 23 | !(bool)(in.flags() & QNetworkInterface::IsPointToPoint) && |
| 24 | 24 | (bool)(in.flags() & QNetworkInterface::IsRunning)){ | ... | ... |
src/cacic_hardware.cpp
| ... | ... | @@ -16,133 +16,137 @@ QJsonObject cacic_hardware::coletaWin() |
| 16 | 16 | { |
| 17 | 17 | QJsonObject hardware; |
| 18 | 18 | QStringList params; |
| 19 | - QJsonValue wmi; | |
| 19 | + QJsonValue wmiResult; | |
| 20 | 20 | // Win32_ComputerSystem (Caption, Description, Domain, DNSHostName, Manufacturer, |
| 21 | 21 | // Model, Name, PrimaryOwnerName, TotalPhysicalMemory, Workgroup) |
| 22 | 22 | params << "Caption" << "Description" << "Domain" << "DNSHostName" << "Manufacturer" << "Model" |
| 23 | 23 | << "Name" << "PrimaryOwnerName" << "TotalPhysicalMemory" << "Workgroup"; |
| 24 | - wmi = wmiSearch("Win32_ComputerSystem", params); | |
| 25 | - if (!wmi.isNull()) | |
| 26 | - hardware["ComputerSystem"] = wmi; | |
| 24 | + wmiResult = wmi::wmiSearch("Win32_ComputerSystem", params); | |
| 25 | + if (!wmiResult.isNull()) | |
| 26 | + hardware["ComputerSystem"] = wmiResult; | |
| 27 | 27 | //Win32_PortableBattery |
| 28 | 28 | // (Verifica se é notebook) |
| 29 | 29 | params.clear(); |
| 30 | - hardware["IsNotebook"] = QJsonValue::fromVariant(!wmiSearch("Win32_PortableBattery", params).isNull()); | |
| 30 | + wmiResult = wmi::wmiSearch("Win32_PortableBattery", params); | |
| 31 | + if (!wmiResult.isNull()){ | |
| 32 | + hardware["IsNotebook"] = QJsonValue::fromVariant(!wmiResult.isNull()); | |
| 33 | + hardware["PortableBattery"] = wmiResult; | |
| 34 | + } | |
| 31 | 35 | //Win32_Bios |
| 32 | 36 | // (Manufacturer, SMBIOSBIOSVersion, BIOSVersion, Version, SerialNumber, ReleaseDate) |
| 33 | 37 | params.clear(); |
| 34 | 38 | params << "Manufacturer" << "SMBIOSBIOSVersion" << "BIOSVersion" << "Version" << "SerialNumber" << "ReleaseDate"; |
| 35 | - wmi = wmiSearch("Win32_Bios", params); | |
| 36 | - if (!wmi.isNull()) | |
| 37 | - hardware["Bios"] = wmi; | |
| 39 | + wmiResult = wmi::wmiSearch("Win32_Bios", params); | |
| 40 | + if (!wmiResult.isNull()) | |
| 41 | + hardware["Bios"] = wmiResult; | |
| 38 | 42 | //Win32_BaseBoard |
| 39 | 43 | // (Manufacturer, Model, SerialNumber) |
| 40 | 44 | params.clear(); |
| 41 | 45 | params << "Manufacturer" << "Model" << "SerialNumber"; |
| 42 | - wmi = wmiSearch("Win32_Baseboard", params); | |
| 43 | - if (!wmi.isNull()) | |
| 44 | - hardware["BaseBoard"] = wmi; | |
| 46 | + wmiResult = wmi::wmiSearch("Win32_Baseboard", params); | |
| 47 | + if (!wmiResult.isNull()) | |
| 48 | + hardware["BaseBoard"] = wmiResult; | |
| 45 | 49 | //Win32_SystemEnclosure |
| 46 | 50 | // (Manufacturer, ChassisTypes, SerialNumber, SMBIOSAssetTag) |
| 47 | 51 | params.clear(); |
| 48 | 52 | params << "Manufacturer" << "ChassisTypes" << "SerialNumber" << "SMBIOSAssetTag"; |
| 49 | - wmi = wmiSearch("Win32_SystemEnclosure", params); | |
| 50 | - if (!wmi.isNull()) | |
| 51 | - hardware["SystemEnclosure"] = wmi; | |
| 53 | + wmiResult = wmi::wmiSearch("Win32_SystemEnclosure", params); | |
| 54 | + if (!wmiResult.isNull()) | |
| 55 | + hardware["SystemEnclosure"] = wmiResult; | |
| 52 | 56 | //Win32_FloppyDrive |
| 53 | 57 | // (Manufacturer, Caption, Description, Name, MediaType, Size) |
| 54 | 58 | params.clear(); |
| 55 | 59 | params << "Manufacturer" << "Caption" << "Description" << "Name"; |
| 56 | - wmi = wmiSearch("Win32_FloppyDrive", params); | |
| 57 | - if (!wmi.isNull()) | |
| 58 | - hardware["FloppyDrive"] = wmi; | |
| 60 | + wmiResult = wmi::wmiSearch("Win32_FloppyDrive", params); | |
| 61 | + if (!wmiResult.isNull()) | |
| 62 | + hardware["FloppyDrive"] = wmiResult; | |
| 59 | 63 | //Win32_DiskDrive |
| 60 | 64 | // (Manufacturer, Caption, Description, Name, MediaType, Size, SerialNumber, Model, FirmwareRevision) |
| 61 | 65 | params.clear(); |
| 62 | 66 | params << "Manufacturer" << "Caption" << "Description" << "Name" << "MediaType" << "Size" << "SerialNumber" |
| 63 | 67 | << "Model" << "FirmwareRevision"; |
| 64 | - wmi = wmiSearch("Win32_DiskDrive", params); | |
| 65 | - if (!wmi.isNull()) | |
| 66 | - hardware["DiskDrive"] = wmi; | |
| 68 | + wmiResult = wmi::wmiSearch("Win32_DiskDrive", params); | |
| 69 | + if (!wmiResult.isNull()) | |
| 70 | + hardware["DiskDrive"] = wmiResult; | |
| 67 | 71 | //Win32_CDROMDrive |
| 68 | 72 | // (Manufacturer, Caption, Description, Name, MediaType, Size) |
| 69 | 73 | params.clear(); |
| 70 | 74 | params << "Manufacturer" << "Caption" << "Description" << "MediaType" << "Name" << "Size"; |
| 71 | - wmi = wmiSearch("Win32_CDROMDrive", params); | |
| 72 | - if (!wmi.isNull()) | |
| 73 | - hardware["CDROMDrive"] = wmi; | |
| 75 | + wmiResult = wmi::wmiSearch("Win32_CDROMDrive", params); | |
| 76 | + if (!wmiResult.isNull()) | |
| 77 | + hardware["CDROMDrive"] = wmiResult; | |
| 74 | 78 | //Win32_FloppyController |
| 75 | 79 | // (Manufacturer, Caption, Description, Name) |
| 76 | 80 | params.clear(); |
| 77 | 81 | params << "Manufacturer" << "Caption" << "Description" << "Name"; |
| 78 | - wmi = wmiSearch("Win32_FloppyController", params); | |
| 79 | - if (!wmi.isNull()) | |
| 80 | - hardware["FloppyController"] = wmi; | |
| 82 | + wmiResult = wmi::wmiSearch("Win32_FloppyController", params); | |
| 83 | + if (!wmiResult.isNull()) | |
| 84 | + hardware["FloppyController"] = wmiResult; | |
| 81 | 85 | //Win32_SCSIController |
| 82 | 86 | // (Manufacturer, Caption, Description, Name, HardwareVersion) |
| 83 | 87 | params.clear(); |
| 84 | 88 | params << "Manufacturer" << "Caption" << "Description" << "Name" << "HardwareVersion"; |
| 85 | - wmi = wmiSearch("Win32_SCSIController", params); | |
| 86 | - if (!wmi.isNull()) | |
| 87 | - hardware["SCSIController"] = wmi; | |
| 89 | + wmiResult = wmi::wmiSearch("Win32_SCSIController", params); | |
| 90 | + if (!wmiResult.isNull()) | |
| 91 | + hardware["SCSIController"] = wmiResult; | |
| 88 | 92 | //Win32_InfraredDevice |
| 89 | 93 | // (Manufacturer, Caption, Description, Name) |
| 90 | 94 | params.clear(); |
| 91 | 95 | params << "Manufacturer" << "Caption" << "Description" << "Name"; |
| 92 | - wmi = wmiSearch("Win32_InfraredDevice", params); | |
| 93 | - if (!wmi.isNull()) | |
| 94 | - hardware["InfraredDevice"] = wmi; | |
| 96 | + wmiResult = wmi::wmiSearch("Win32_InfraredDevice", params); | |
| 97 | + if (!wmiResult.isNull()) | |
| 98 | + hardware["InfraredDevice"] = wmiResult; | |
| 95 | 99 | //Win32_USBController |
| 96 | 100 | // (Manufacturer, Caption, Description, Name) |
| 97 | 101 | params.clear(); |
| 98 | 102 | params << "Manufacturer" << "Caption" << "Description" << "Name"; |
| 99 | - wmi = wmiSearch("Win32_USBController", params); | |
| 100 | - if (!wmi.isNull()) | |
| 101 | - hardware["USBController"] = wmi; | |
| 103 | + wmiResult = wmi::wmiSearch("Win32_USBController", params); | |
| 104 | + if (!wmiResult.isNull()) | |
| 105 | + hardware["USBController"] = wmiResult; | |
| 102 | 106 | //Win32_PCMCIAController |
| 103 | 107 | // (Manufacturer, Caption, Description, Name) |
| 104 | 108 | params.clear(); |
| 105 | 109 | params << "Manufacturer" << "Caption" << "Description" << "Name"; |
| 106 | - wmi = wmiSearch("Win32_PCMCIAController", params); | |
| 107 | - if (!wmi.isNull()) | |
| 108 | - hardware["PCMCIAController"] = wmi; | |
| 110 | + wmiResult = wmi::wmiSearch("Win32_PCMCIAController", params); | |
| 111 | + if (!wmiResult.isNull()) | |
| 112 | + hardware["PCMCIAController"] = wmiResult; | |
| 109 | 113 | //Win32_VideoController |
| 110 | 114 | // (Description, VideoProcessor, AdapterRAM, CurrentHorizontalResolution, CurrentVerticalResolution, Caption, Name) |
| 111 | 115 | params.clear(); |
| 112 | 116 | params << "VideoProcessor" << "AdapterRAM" << "Description" << "Name" << "CurrentHorizontalResolution" |
| 113 | 117 | << "CurrentVerticalResolution" << "Caption" << "AcceleratorCapabilities"; |
| 114 | - wmi = wmiSearch("Win32_VideoController", params); | |
| 115 | - if (!wmi.isNull()) | |
| 116 | - hardware["VideoController"] = wmi; | |
| 118 | + wmiResult = wmi::wmiSearch("Win32_VideoController", params); | |
| 119 | + if (!wmiResult.isNull()) | |
| 120 | + hardware["VideoController"] = wmiResult; | |
| 117 | 121 | //Win32_DesktopMonitor |
| 118 | 122 | // (MonitorManufacturer, Caption, Description, MonitorType, Name) |
| 119 | 123 | params.clear(); |
| 120 | 124 | params << "MonitorManufacturer" << "Caption" << "Description" << "MonitorType" << "Name"; |
| 121 | - wmi = wmiSearch("Win32_DesktopMonitor", params); | |
| 122 | - if (!wmi.isNull()) | |
| 123 | - hardware["DesktopMonitor"] = wmi; | |
| 125 | + wmiResult = wmi::wmiSearch("Win32_DesktopMonitor", params); | |
| 126 | + if (!wmiResult.isNull()) | |
| 127 | + hardware["DesktopMonitor"] = wmiResult; | |
| 124 | 128 | //Win32_Printer |
| 125 | 129 | // (Name, DriverName, PortName, ServerName, ShareName, HorizontalResolution, VerticalResolution, Comment, Shared, Network) |
| 126 | 130 | params.clear(); |
| 127 | 131 | params << "Name" << "DriverName" << "PortName" << "ServerName" << "ShareName" << "HorizontalResolution" |
| 128 | 132 | << "VerticalResolution" << "Comment" << "Shared" << "Network"; |
| 129 | - wmi = wmiSearch("Win32_Printer", params); | |
| 130 | - if (!wmi.isNull()) | |
| 131 | - hardware["Printer"] = wmi; | |
| 133 | + wmiResult = wmi::wmiSearch("Win32_Printer", params); | |
| 134 | + if (!wmiResult.isNull()) | |
| 135 | + hardware["Printer"] = wmiResult; | |
| 132 | 136 | //Win32_PortConnector |
| 133 | 137 | // (ExternalReferenceDesignator, PortType (verificar), ConnectorType (verificar), Manufacturer, Caption, Name) |
| 134 | 138 | params.clear(); |
| 135 | 139 | params << "ExternalReferenceDesignator" << "PortType" << "ConnectorType" << "Name" << "Caption" << "Manufacturer"; |
| 136 | - wmi = wmiSearch("Win32_PortConnector", params); | |
| 137 | - if (!wmi.isNull()) | |
| 138 | - hardware["PortConnector"] = wmi; | |
| 140 | + wmiResult = wmi::wmiSearch("Win32_PortConnector", params); | |
| 141 | + if (!wmiResult.isNull()) | |
| 142 | + hardware["PortConnector"] = wmiResult; | |
| 139 | 143 | //Win32_SerialPort |
| 140 | 144 | // (Name, Caption, Description, StatusInfo) |
| 141 | 145 | params.clear(); |
| 142 | 146 | params << "Name" << "Caption" << "Description" << "StatusInfo"; |
| 143 | - wmi = wmiSearch("Win32_SerialPort", params); | |
| 144 | - if (!wmi.isNull()) | |
| 145 | - hardware["SerialPort"] = wmi; | |
| 147 | + wmiResult = wmi::wmiSearch("Win32_SerialPort", params); | |
| 148 | + if (!wmiResult.isNull()) | |
| 149 | + hardware["SerialPort"] = wmiResult; | |
| 146 | 150 | //Win32_Processor |
| 147 | 151 | // (MaxClockSpeed, Name, Architecture, NumberOfCores, SocketDesignation, Manufacturer, Architecture, NumberOfCores |
| 148 | 152 | // CurrentClockSpeed, MaxClockSpeed, L2CacheSize, AddressWidth, DataWidth, VoltageCaps, CpuStatus, |
| ... | ... | @@ -151,154 +155,64 @@ QJsonObject cacic_hardware::coletaWin() |
| 151 | 155 | params << "MaxClockSpeed" << "Name" << "Architecture" << "NumberOfCores" << "SocketDesignation" << "Manufacturer" |
| 152 | 156 | << "Architecture" << "NumberOfCores" << "CurrentClockSpeed" << "MaxClockSpeed" << "L2CacheSize" << "AddressWidth" |
| 153 | 157 | << "DataWidth" << "VoltageCaps" << "CpuStatus" << "ProcessorId" << "UniqueId" << "AddressWidth"; |
| 154 | - wmi = wmiSearch("Win32_Processor", params); | |
| 155 | - if (!wmi.isNull()) | |
| 156 | - hardware["Processor"] = wmi; | |
| 158 | + wmiResult = wmi::wmiSearch("Win32_Processor", params); | |
| 159 | + if (!wmiResult.isNull()) | |
| 160 | + hardware["Processor"] = wmiResult; | |
| 157 | 161 | //Win32_OperatingSystem |
| 158 | 162 | // (Name, Version, CSDVersion, Description, InstallDate, Organization, RegisteredUser, SerialNumber) |
| 159 | 163 | params.clear(); |
| 160 | 164 | params << "Name" << "Version" << "CSDVersion" << "Description" << "InstallDate" << "Organization" << "RegisteredUser" |
| 161 | 165 | << "SerialNumber"; |
| 162 | - wmi = wmiSearch("Win32_OperatingSystem", params); | |
| 163 | - if (!wmi.isNull()) | |
| 164 | - hardware["OperatingSystem"] = wmi; | |
| 166 | + wmiResult = wmi::wmiSearch("Win32_OperatingSystem", params); | |
| 167 | + if (!wmiResult.isNull()) | |
| 168 | + hardware["OperatingSystem"] = wmiResult; | |
| 165 | 169 | //Win32_SystemSlot |
| 166 | 170 | // (Name, Description, SlotDesignation, CurrentUsage, Status, Shared) |
| 167 | 171 | params.clear(); |
| 168 | 172 | params << "Name" << "Description" << "SlotDesignation" << "CurrentUsage" << "Status" << "Shared"; |
| 169 | - wmi = wmiSearch("Win32_SystemSlot", params); | |
| 170 | - if (!wmi.isNull()) | |
| 171 | - hardware["SystemSlot"] = wmi; | |
| 173 | + wmiResult = wmi::wmiSearch("Win32_SystemSlot", params); | |
| 174 | + if (!wmiResult.isNull()) | |
| 175 | + hardware["SystemSlot"] = wmiResult; | |
| 172 | 176 | //Win32_LogicalDisk |
| 173 | 177 | // (Caption, DriveType, Filesystem, VolumeName, ProviderName, Filesystem, VolumeName, Size, FreeSpace) |
| 174 | 178 | params.clear(); |
| 175 | 179 | params << "Caption" << "DriveType" << "Filesystem" << "VolumeName" << "ProviderName" << "Filesystem" << "VolumeName" |
| 176 | 180 | << "Size" << "FreeSpace"; |
| 177 | - wmi = wmiSearch("Win32_LogicalDisk", params); | |
| 178 | - if (!wmi.isNull()) | |
| 179 | - hardware["LogicalDisk"] = wmi; | |
| 181 | + wmiResult = wmi::wmiSearch("Win32_LogicalDisk", params); | |
| 182 | + if (!wmiResult.isNull()) | |
| 183 | + hardware["LogicalDisk"] = wmiResult; | |
| 180 | 184 | //Win32_PhysicalMemory |
| 181 | 185 | // (Caption, Description, BankLabel, DeviceLocator, Capacity, Speed, MemoryType, SerialNumber) |
| 182 | 186 | params.clear(); |
| 183 | 187 | params << "Caption" << "Description" << "BankLabel" << "DeviceLocator" << "Capacity" << "Speed" << "MemoryType"; |
| 184 | - wmi = wmiSearch("Win32_PhysicalMemory", params); | |
| 185 | - if (!wmi.isNull()) | |
| 186 | - hardware["PhysicalMemory"] = wmi; | |
| 188 | + wmiResult = wmi::wmiSearch("Win32_PhysicalMemory", params); | |
| 189 | + if (!wmiResult.isNull()) | |
| 190 | + hardware["PhysicalMemory"] = wmiResult; | |
| 187 | 191 | //Win32_Keyboard |
| 188 | 192 | // (Caption, Description, Name) |
| 189 | 193 | params.clear(); |
| 190 | 194 | params << "Caption" << "Description" << "Name" << "Layout"; |
| 191 | - wmi = wmiSearch("Win32_Keyboard", params); | |
| 192 | - if (!wmi.isNull()) | |
| 193 | - hardware["Keyboard"] = wmi; | |
| 195 | + wmiResult = wmi::wmiSearch("Win32_Keyboard", params); | |
| 196 | + if (!wmiResult.isNull()) | |
| 197 | + hardware["Keyboard"] = wmiResult; | |
| 194 | 198 | //Win32_PointingDevice |
| 195 | 199 | // (Manufacturer, Caption, Description, PointingType, DeviceInterface) |
| 196 | 200 | params.clear(); |
| 197 | 201 | params << "Manufacturer" << "Caption" << "Description" << "PointingType" << "DeviceInterface"; |
| 198 | - wmi = wmiSearch("Win32_PointingDevice", params); | |
| 199 | - if (!wmi.isNull()) | |
| 200 | - hardware["PointingDevice"] = wmi; | |
| 202 | + wmiResult = wmi::wmiSearch("Win32_PointingDevice", params); | |
| 203 | + if (!wmiResult.isNull()) | |
| 204 | + hardware["PointingDevice"] = wmiResult; | |
| 201 | 205 | //Win32_PnPSignedDriver |
| 202 | 206 | // (Manufacturer, DeviceName, Description, Location, DeviceClass) |
| 203 | 207 | params.clear(); |
| 204 | 208 | params << "Manufacturer" << "DeviceName" << "Description" << "Location" << "DeviceClass"; |
| 205 | - wmi = wmiSearch("Win32_PnPSignedDriver", params); | |
| 206 | - if (!wmi.isNull()) | |
| 207 | - hardware["PnPSignedDriver"] = wmi; | |
| 209 | + wmiResult = wmi::wmiSearch("Win32_PnPSignedDriver", params); | |
| 210 | + if (!wmiResult.isNull()) | |
| 211 | + hardware["PnPSignedDriver"] = wmiResult; | |
| 208 | 212 | // qDebug() << hardware; |
| 209 | 213 | return hardware; |
| 210 | 214 | } |
| 211 | 215 | |
| 212 | -QJsonValue cacic_hardware::wmiSearch(QString classe, QStringList params) | |
| 213 | -{ | |
| 214 | - QJsonValue wmiReturn; | |
| 215 | - QJsonObject itemWmi; | |
| 216 | - QJsonArray arrayItens; | |
| 217 | - QString paramsString; | |
| 218 | - if (!params.empty()){ | |
| 219 | - for(int i = 0; i!=params.size();i++) | |
| 220 | - paramsString.append(params.at(i) + ((i != params.size() - 1) ? "," : "")); | |
| 221 | - } | |
| 222 | - QString query = "SELECT " + ((!paramsString.isEmpty()) ? paramsString : "*") + " FROM " + classe; | |
| 223 | - //conecta ao script (Como já estamos usando QObject, o WbemScripting... não funciona chamando normal, | |
| 224 | - // por isso deve ser usado o CoInitializeEx) | |
| 225 | - ::CoInitializeEx(NULL, COINIT_MULTITHREADED); | |
| 226 | - QAxObject *objIWbemLocator = new QAxObject(); | |
| 227 | - objIWbemLocator->setControl("WbemScripting.SWbemLocator"); | |
| 228 | - if (objIWbemLocator->isNull()) | |
| 229 | - return QJsonValue(); | |
| 230 | - //conecta ao wmi | |
| 231 | - QAxObject *objWMIService = objIWbemLocator->querySubObject("ConnectServer(QString&,QString&)", | |
| 232 | - QString("."), | |
| 233 | - QString("root\\CIMV2") | |
| 234 | - ); | |
| 235 | -// qDebug() << ">>>>>>>>>" << objIWbemLocator->isNull() << objWMIService->isNull(); | |
| 236 | - //Faz a pesquisa no wmi | |
| 237 | - QAxObject* returnList = objWMIService->querySubObject("ExecQuery(QString&)", query); | |
| 238 | -// qDebug() << "<<<<<<<<<<<<<<<<<<<<<<<"; | |
| 239 | - QAxObject *enum1 = returnList->querySubObject("_NewEnum"); | |
| 240 | - | |
| 241 | - IEnumVARIANT* enumInterface = 0; | |
| 242 | - | |
| 243 | - enum1->queryInterface(IID_IEnumVARIANT, (void**)&enumInterface); | |
| 244 | - | |
| 245 | - enumInterface->Reset(); | |
| 246 | - int countReturnListObj = returnList->dynamicCall("Count").toInt(); | |
| 247 | - for (int i = 0; i < countReturnListObj; i++) { | |
| 248 | - VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT)); | |
| 249 | - if (enumInterface->Next(1,theItem,NULL) != S_FALSE){ | |
| 250 | - QAxObject *item = new QAxObject((IUnknown *)theItem->punkVal); | |
| 251 | - if(item){ | |
| 252 | - //pega o retorno da query | |
| 253 | - QString instance = item->dynamicCall("GetObjectText_(int)", QVariant(0)).toString(); | |
| 254 | - QStringList instanceList = instance.split("\n\t"); | |
| 255 | - //Pra cada linha grava no json os valores com cada tag | |
| 256 | - foreach(QString value, instanceList){ | |
| 257 | - QStringList valueList = value.split("="); | |
| 258 | - if (valueList.size() > 1){ | |
| 259 | - QString tag = valueList.at(0).trimmed(); | |
| 260 | - QString aux = valueList.at(1).trimmed(); | |
| 261 | - aux.remove("\""); | |
| 262 | - aux.remove(";"); | |
| 263 | - aux.remove("\n"); | |
| 264 | - //verifica se é lista | |
| 265 | - if(aux.startsWith("{") && aux.endsWith("}")){ | |
| 266 | - QStringList auxList = aux.split(","); | |
| 267 | - QJsonArray jList; | |
| 268 | - foreach(QString valueList, auxList){ | |
| 269 | - if (valueList.contains("{")) | |
| 270 | - valueList.remove("{"); | |
| 271 | - if (valueList.contains("}")) | |
| 272 | - valueList.remove("}"); | |
| 273 | - jList.append(valueList.trimmed()); | |
| 274 | - } | |
| 275 | - itemWmi[tag] = jList; | |
| 276 | - } else { | |
| 277 | - //O último valor sempre volta com "}" no final. | |
| 278 | - if (aux.contains("}")) | |
| 279 | - aux.remove("}"); | |
| 280 | - itemWmi[tag] = QJsonValue::fromVariant(aux.trimmed()); | |
| 281 | - } | |
| 282 | - } | |
| 283 | - } // foreach(QString value, instanceList) | |
| 284 | - } // if(item) | |
| 285 | - } // if (enumInterface->Next(1,theItem,NULL) != S_FALSE) | |
| 286 | - //Se houver mais de um objeto, grava em uma lista | |
| 287 | - if (countReturnListObj > 1){ | |
| 288 | - arrayItens.append(QJsonValue(itemWmi)); | |
| 289 | - } | |
| 290 | - } | |
| 291 | - objIWbemLocator->clear(); | |
| 292 | - ::CoUninitialize(); | |
| 293 | - //se for mais de um objeto, retorna array. | |
| 294 | - if (!arrayItens.isEmpty()) | |
| 295 | - wmiReturn = QJsonValue(arrayItens); | |
| 296 | - //senão, se o objeto não for vazio (se tiver coletado algo) | |
| 297 | - else if (!itemWmi.isEmpty()) | |
| 298 | - wmiReturn = QJsonValue(itemWmi); | |
| 299 | - | |
| 300 | - return wmiReturn; | |
| 301 | -} | |
| 302 | 216 | #elif defined(Q_OS_LINUX) |
| 303 | 217 | QJsonObject cacic_hardware::coletaLinux() |
| 304 | 218 | { | ... | ... |
src/cacic_hardware.h
| ... | ... | @@ -8,8 +8,7 @@ |
| 8 | 8 | #include <console.h> |
| 9 | 9 | #include <operatingsystem.h> |
| 10 | 10 | #ifdef Q_OS_WIN |
| 11 | - #include <windows.h> | |
| 12 | - #include <ActiveQt/ActiveQt> | |
| 11 | + #include <wmi.h> | |
| 13 | 12 | #endif |
| 14 | 13 | |
| 15 | 14 | class cacic_hardware |
| ... | ... | @@ -22,7 +21,6 @@ public: |
| 22 | 21 | private: |
| 23 | 22 | #ifdef Q_OS_WIN |
| 24 | 23 | QJsonObject coletaWin(); |
| 25 | - QJsonValue wmiSearch(QString classe, QStringList params); | |
| 26 | 24 | |
| 27 | 25 | #elif defined(Q_OS_LINUX) |
| 28 | 26 | QJsonObject coletaLinux(); | ... | ... |
src/cacic_software.h
src/operatingsystem.cpp
| ... | ... | @@ -45,16 +45,15 @@ int OperatingSystem::coletaIdOs(){ |
| 45 | 45 | QString OperatingSystem::coletaNomeOs() |
| 46 | 46 | { |
| 47 | 47 | #if defined(Q_OS_WIN) |
| 48 | - QString text; | |
| 49 | - QStringList environment = QProcessEnvironment::systemEnvironment().toStringList(); | |
| 50 | - foreach (text, environment) { | |
| 51 | -// qDebug() << text; | |
| 52 | - if (text.contains("OS=" , Qt::CaseInsensitive) ){ | |
| 53 | - QStringList split = text.split("="); | |
| 54 | - // qDebug() << split[1]; | |
| 55 | - return split[1]; | |
| 56 | - } | |
| 57 | - } | |
| 48 | + QStringList params; | |
| 49 | + QJsonValue osName; | |
| 50 | + params << "Name"; | |
| 51 | + osName = wmi::wmiSearch("Win32_OperatingSystem", params); | |
| 52 | + if (!osName.isNull()){ | |
| 53 | + QString retorno = osName.toObject()["Name"].toString(); | |
| 54 | + retorno = retorno.left(retorno.indexOf("|")); | |
| 55 | + return retorno; | |
| 56 | + } | |
| 58 | 57 | #elif defined(Q_OS_LINUX) |
| 59 | 58 | ConsoleObject console; |
| 60 | 59 | QStringList catOutput = console("cat /etc/*release").split("\n"); | ... | ... |
src/operatingsystem.h
src/qtservice/common.pri
| 1 | -exists(config.pri):infile(config.pri, SOLUTIONS_LIBRARY, yes): CONFIG += qtservice-uselib | |
| 1 | +#exists(config.pri):infile(config.pri, SOLUTIONS_LIBRARY, yes): CONFIG += qtservice-uselib | |
| 2 | 2 | TEMPLATE += fakelib |
| 3 | 3 | QTSERVICE_LIBNAME = QtSolutions_Service-head |
| 4 | 4 | CONFIG(debug, debug|release) { | ... | ... |
src/wmi.cpp
| ... | ... | @@ -3,3 +3,94 @@ |
| 3 | 3 | wmi::wmi() |
| 4 | 4 | { |
| 5 | 5 | } |
| 6 | + | |
| 7 | +QJsonValue wmi::wmiSearch(QString classe, QStringList params) | |
| 8 | +{ | |
| 9 | + QJsonValue wmiReturn; | |
| 10 | + QJsonObject itemWmi; | |
| 11 | + QJsonArray arrayItens; | |
| 12 | + QString paramsString; | |
| 13 | + if (!params.empty()){ | |
| 14 | + for(int i = 0; i!=params.size();i++) | |
| 15 | + paramsString.append(params.at(i) + ((i != params.size() - 1) ? "," : "")); | |
| 16 | + } | |
| 17 | + QString query = "SELECT " + ((!paramsString.isEmpty()) ? paramsString : "*") + " FROM " + classe; | |
| 18 | + //conecta ao script (Como já estamos usando QObject, o WbemScripting... não funciona chamando normal, | |
| 19 | + // por isso deve ser usado o CoInitializeEx) | |
| 20 | + ::CoInitializeEx(NULL, COINIT_MULTITHREADED); | |
| 21 | + QAxObject *objIWbemLocator = new QAxObject(); | |
| 22 | + objIWbemLocator->setControl("WbemScripting.SWbemLocator"); | |
| 23 | + if (objIWbemLocator->isNull()) | |
| 24 | + return QJsonValue(); | |
| 25 | + //conecta ao wmi | |
| 26 | + QAxObject *objWMIService = objIWbemLocator->querySubObject("ConnectServer(QString&,QString&)", | |
| 27 | + QString("."), | |
| 28 | + QString("root\\CIMV2") | |
| 29 | + ); | |
| 30 | +// qDebug() << ">>>>>>>>>" << objIWbemLocator->isNull() << objWMIService->isNull(); | |
| 31 | + //Faz a pesquisa no wmi | |
| 32 | + QAxObject* returnList = objWMIService->querySubObject("ExecQuery(QString&)", query); | |
| 33 | +// qDebug() << "<<<<<<<<<<<<<<<<<<<<<<<"; | |
| 34 | + QAxObject *enum1 = returnList->querySubObject("_NewEnum"); | |
| 35 | + | |
| 36 | + IEnumVARIANT* enumInterface = 0; | |
| 37 | + | |
| 38 | + enum1->queryInterface(IID_IEnumVARIANT, (void**)&enumInterface); | |
| 39 | + | |
| 40 | + enumInterface->Reset(); | |
| 41 | + int countReturnListObj = returnList->dynamicCall("Count").toInt(); | |
| 42 | + for (int i = 0; i < countReturnListObj; i++) { | |
| 43 | + VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT)); | |
| 44 | + if (enumInterface->Next(1,theItem,NULL) != S_FALSE){ | |
| 45 | + QAxObject *item = new QAxObject((IUnknown *)theItem->punkVal); | |
| 46 | + if(item){ | |
| 47 | + //pega o retorno da query | |
| 48 | + QString instance = item->dynamicCall("GetObjectText_(int)", QVariant(0)).toString(); | |
| 49 | + QStringList instanceList = instance.split("\n\t"); | |
| 50 | + //Pra cada linha grava no json os valores com cada tag | |
| 51 | + foreach(QString value, instanceList){ | |
| 52 | + QStringList valueList = value.split("="); | |
| 53 | + if (valueList.size() > 1){ | |
| 54 | + QString tag = valueList.at(0).trimmed(); | |
| 55 | + QString aux = valueList.at(1).trimmed(); | |
| 56 | + aux.remove("\""); | |
| 57 | + aux.remove(";"); | |
| 58 | + aux.remove("\n"); | |
| 59 | + //verifica se é lista | |
| 60 | + if(aux.startsWith("{") && aux.endsWith("}")){ | |
| 61 | + QStringList auxList = aux.split(","); | |
| 62 | + QJsonArray jList; | |
| 63 | + foreach(QString valueList, auxList){ | |
| 64 | + if (valueList.contains("{")) | |
| 65 | + valueList.remove("{"); | |
| 66 | + if (valueList.contains("}")) | |
| 67 | + valueList.remove("}"); | |
| 68 | + jList.append(valueList.trimmed()); | |
| 69 | + } | |
| 70 | + itemWmi[tag] = jList; | |
| 71 | + } else { | |
| 72 | + //O último valor sempre volta com "}" no final. | |
| 73 | + if (aux.contains("}")) | |
| 74 | + aux.remove("}"); | |
| 75 | + itemWmi[tag] = QJsonValue::fromVariant(aux.trimmed()); | |
| 76 | + } | |
| 77 | + } | |
| 78 | + } // foreach(QString value, instanceList) | |
| 79 | + } // if(item) | |
| 80 | + } // if (enumInterface->Next(1,theItem,NULL) != S_FALSE) | |
| 81 | + //Se houver mais de um objeto, grava em uma lista | |
| 82 | + if (countReturnListObj > 1){ | |
| 83 | + arrayItens.append(QJsonValue(itemWmi)); | |
| 84 | + } | |
| 85 | + } | |
| 86 | + objIWbemLocator->clear(); | |
| 87 | + ::CoUninitialize(); | |
| 88 | + //se for mais de um objeto, retorna array. | |
| 89 | + if (!arrayItens.isEmpty()) | |
| 90 | + wmiReturn = QJsonValue(arrayItens); | |
| 91 | + //senão, se o objeto não for vazio (se tiver coletado algo) | |
| 92 | + else if (!itemWmi.isEmpty()) | |
| 93 | + wmiReturn = QJsonValue(itemWmi); | |
| 94 | + | |
| 95 | + return wmiReturn; | |
| 96 | +} | ... | ... |
src/wmi.h