阶段性完成,还差独立浏览器和几个别的需求。
This commit is contained in:
@ -33,6 +33,7 @@
|
||||
#pragma comment(lib,"comsuppw.lib")
|
||||
QString background_color;
|
||||
QString text_color;
|
||||
QString text_cover_color;
|
||||
//读取注册表获取MachineUUID
|
||||
bool IsWin11AndLater()
|
||||
{
|
||||
@ -256,8 +257,8 @@ void ConfigRequest::sendRequest(ConfigResponse *configResponse) {
|
||||
for(auto value:array){
|
||||
QJsonObject object=value.toObject();
|
||||
Button button;
|
||||
button.img = object.value("img").toString();
|
||||
button.png = object.value("logo").toString();
|
||||
button.img = object.value("logo").toString();
|
||||
button.png = object.value("img").toString();
|
||||
button.img_name = object.value("img_name").toString();
|
||||
button.name = object.value("name").toString();
|
||||
button.type = object.value("type").toString();
|
||||
@ -324,8 +325,6 @@ void RequestBodyBase::sendRequest() {
|
||||
|
||||
|
||||
DeviceRequest::DeviceRequest() : RequestBodyBase() {
|
||||
//CPU
|
||||
QString cpu = QSysInfo::currentCpuArchitecture();
|
||||
//内存大小
|
||||
MEMORYSTATUSEX status;
|
||||
status.dwLength = sizeof(status);
|
||||
@ -334,60 +333,15 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() {
|
||||
//硬盘大小
|
||||
QStorageInfo storage = QStorageInfo::root();
|
||||
int disk = storage.bytesTotal() / static_cast<qulonglong>(1024 * 1024 * 1024);
|
||||
//显卡型号
|
||||
QStringList gpus;
|
||||
BOOL success;
|
||||
DWORD deviceIndex = 0;
|
||||
DISPLAY_DEVICE displayDevice;
|
||||
displayDevice.cb = sizeof(displayDevice);
|
||||
while (EnumDisplayDevices(NULL, deviceIndex, &displayDevice, 0)) {
|
||||
WCHAR valueName[128];
|
||||
DWORD valueSize;
|
||||
DWORD valueType;
|
||||
BYTE valueData[MAX_PATH];
|
||||
HKEY hKey;
|
||||
WCHAR keyName[128];
|
||||
wsprintf(keyName, L"SYSTEM\\CurrentControlSet\\Control\\Video\\%s\\HardwareInformation",
|
||||
displayDevice.DeviceID);
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyName, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
|
||||
valueSize = sizeof(valueData);
|
||||
wsprintf(valueName, L"HardwareInformation.AdapterString");
|
||||
if (RegQueryValueEx(hKey, valueName, NULL, &valueType, valueData, &valueSize) == ERROR_SUCCESS) {
|
||||
Q_ASSERT(valueType == REG_SZ);
|
||||
QString adapterString = QString::fromWCharArray((wchar_t *) valueData, valueSize / sizeof(wchar_t) - 1);
|
||||
gpus.append(adapterString);
|
||||
}
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
deviceIndex++;
|
||||
displayDevice.cb = sizeof(displayDevice);
|
||||
}
|
||||
//主板型号
|
||||
QString motherboard = QSysInfo::prettyProductName();
|
||||
|
||||
//WMI获取网卡型号
|
||||
HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);
|
||||
HRESULT hr = CoInitializeEx(0, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to initialize COM library." << std::endl;
|
||||
return;
|
||||
}
|
||||
QStringList netCards;
|
||||
hr = CoInitializeSecurity(
|
||||
NULL,
|
||||
-1,
|
||||
NULL,
|
||||
NULL,
|
||||
RPC_C_AUTHN_LEVEL_DEFAULT,
|
||||
RPC_C_IMP_LEVEL_IMPERSONATE,
|
||||
NULL,
|
||||
EOAC_NONE,
|
||||
NULL
|
||||
);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to initialize security." << std::endl;
|
||||
CoUninitialize();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
IWbemLocator* pLoc = NULL;
|
||||
hr = CoCreateInstance(
|
||||
CLSID_WbemLocator,
|
||||
@ -441,7 +395,7 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() {
|
||||
IEnumWbemClassObject* pEnumerator = NULL;
|
||||
hr = pSvc->ExecQuery(
|
||||
_bstr_t("WQL"),
|
||||
_bstr_t("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = TRUE AND NetConnectionStatus = 3"),
|
||||
_bstr_t("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = TRUE"),
|
||||
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
|
||||
NULL,
|
||||
&pEnumerator
|
||||
@ -471,6 +425,78 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() {
|
||||
|
||||
pClassObj->Release();
|
||||
}
|
||||
pEnumerator->Release();
|
||||
pEnumerator = nullptr;
|
||||
// 获取 CPU 信息
|
||||
hr = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_Processor"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
|
||||
IWbemClassObject* pclsObj = NULL;
|
||||
uReturn = 0;
|
||||
QString cpu;
|
||||
while (pEnumerator) {
|
||||
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
|
||||
if (0 == uReturn) break;
|
||||
|
||||
VARIANT vtProp;
|
||||
hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
|
||||
if (SUCCEEDED(hr)) {
|
||||
cpu=QString::fromWCharArray(vtProp.bstrVal);
|
||||
VariantClear(&vtProp);
|
||||
}
|
||||
pclsObj->Release();
|
||||
}
|
||||
|
||||
// 获取主板信息
|
||||
QString motherboard;
|
||||
hr = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_BaseBoard"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
|
||||
while (pEnumerator) {
|
||||
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
|
||||
if (0 == uReturn) break;
|
||||
|
||||
VARIANT vtProp;
|
||||
hr = pclsObj->Get(L"Product", 0, &vtProp, 0, 0);
|
||||
if (SUCCEEDED(hr)) {
|
||||
motherboard=QString::fromWCharArray(vtProp.bstrVal);
|
||||
VariantClear(&vtProp);
|
||||
}
|
||||
pclsObj->Release();
|
||||
}
|
||||
|
||||
pEnumerator->Release();
|
||||
pEnumerator=nullptr;
|
||||
//WMI获取显卡型号
|
||||
hr = pSvc->ExecQuery(
|
||||
bstr_t("WQL"),
|
||||
bstr_t("SELECT * FROM Win32_VideoController"),
|
||||
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
|
||||
NULL,
|
||||
&pEnumerator);
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
std::cerr << "Query failed." << std::endl;
|
||||
pSvc->Release();
|
||||
pLoc->Release();
|
||||
CoUninitialize();
|
||||
return;
|
||||
}
|
||||
QStringList graphicsCards;
|
||||
pclsObj->Release();
|
||||
pclsObj = NULL;
|
||||
uReturn = 0;
|
||||
while (pEnumerator)
|
||||
{
|
||||
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
|
||||
if (0 == uReturn) break;
|
||||
|
||||
VARIANT vtProp;
|
||||
hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
graphicsCards<< QString::fromWCharArray(vtProp.bstrVal);
|
||||
VariantClear(&vtProp);
|
||||
}
|
||||
pclsObj->Release();
|
||||
}
|
||||
//WMI获取声卡型号
|
||||
hr = pSvc->ExecQuery(
|
||||
_bstr_t("WQL"),
|
||||
@ -531,7 +557,7 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() {
|
||||
hr = pClassObj->Get(L"Manufacturer", 0, &vtProp, 0, 0);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
std::wcout << "Manufacturer: " << vtProp.bstrVal << std::endl;
|
||||
RAMModel<<QString::fromWCharArray(vtProp.bstrVal);
|
||||
VariantClear(&vtProp);
|
||||
}
|
||||
|
||||
@ -547,9 +573,30 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() {
|
||||
pSvc->Release();
|
||||
pLoc->Release();
|
||||
CoUninitialize();
|
||||
DISPLAY_DEVICE d = { sizeof(DISPLAY_DEVICE) };
|
||||
::EnumDisplayDevices(NULL, 0, &d, 0);
|
||||
QString monitor=QString::fromWCharArray(d.DeviceString, wcslen(d.DeviceString));
|
||||
|
||||
DISPLAY_DEVICE dd;
|
||||
ZeroMemory(&dd, sizeof(dd));
|
||||
dd.cb = sizeof(dd);
|
||||
int deviceIndex = 0;
|
||||
QStringList monitors;
|
||||
// 枚举显卡设备
|
||||
while (EnumDisplayDevices(0, deviceIndex, &dd, 0))
|
||||
{
|
||||
DISPLAY_DEVICE monitor;
|
||||
ZeroMemory(&monitor, sizeof(monitor));
|
||||
monitor.cb = sizeof(monitor);
|
||||
int monitorIndex = 0;
|
||||
|
||||
// 对每个显卡枚举其连接的显示器
|
||||
while (EnumDisplayDevices(dd.DeviceName, monitorIndex, &monitor, 0))
|
||||
{
|
||||
// 打印显示器型号
|
||||
monitors<<QString::fromWCharArray(monitor.DeviceString);
|
||||
monitorIndex++;
|
||||
}
|
||||
|
||||
deviceIndex++;
|
||||
}
|
||||
//发送
|
||||
//构造JSON
|
||||
QJsonDocument *device=new QJsonDocument;
|
||||
@ -558,9 +605,11 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() {
|
||||
object->insert("RAM",QJsonValue(ram));
|
||||
object->insert("Hard_Disk",QJsonValue(disk));
|
||||
QJsonArray *gpu_array=new QJsonArray;
|
||||
for(auto gpu:gpus) {
|
||||
gpu_array->append(gpu);
|
||||
}
|
||||
|
||||
for(auto gpu:graphicsCards)
|
||||
{
|
||||
gpu_array->append(gpu);
|
||||
}
|
||||
object->insert("GPU",*gpu_array);
|
||||
delete gpu_array;
|
||||
object->insert("Mother_Board",motherboard);
|
||||
@ -582,7 +631,13 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() {
|
||||
}
|
||||
object->insert("Audio_Card",*audioCards_json);
|
||||
delete audioCards_json;
|
||||
object->insert("Monitor",monitor);
|
||||
QJsonArray *monitors_json=new QJsonArray;
|
||||
for(auto monitor:monitors)
|
||||
{
|
||||
monitors_json->append(monitor);
|
||||
}
|
||||
object->insert("Monitor",*monitors_json);
|
||||
delete monitors_json;
|
||||
device->setObject(*object);
|
||||
delete object;
|
||||
QJsonObject obj_root=qJsonDocument.object();
|
||||
@ -597,6 +652,7 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() {
|
||||
requestInfo.setUrl(QUrl(DEVICE_URL));
|
||||
requestInfo.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
|
||||
//保存响应的变量
|
||||
qDebug()<<qJsonDocument.toJson();
|
||||
reply = httpMgr->post(requestInfo,qJsonDocument.toJson());
|
||||
//开启一个循环,直到超时或者获取到数据为止
|
||||
connect(reply,&QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
|
||||
@ -605,6 +661,8 @@ DeviceRequest::DeviceRequest() : RequestBodyBase() {
|
||||
timer->start(5000);
|
||||
//启动循环
|
||||
eventLoop.exec();
|
||||
qDebug()<<reply->error();
|
||||
qDebug()<<reply->readAll();
|
||||
delete httpMgr;
|
||||
}
|
||||
bool SoftwareRequest::sendRequest(QHash<QString,QString>&startMenu, QHash<QString, Record> *records, QJsonArray &software_exists)
|
||||
|
Reference in New Issue
Block a user