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