Advertisement
WhiteMagic

wmi

Jul 15th, 2019
2,147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void MainWindow::on_pushButton_3_clicked()
  2. {
  3.     QAxObject *objIWbemLocator = new QAxObject("WbemScripting.SWbemLocator");
  4.         if (!objIWbemLocator) {
  5.         qDebug("WbemScripting.SWbemLocator not created");
  6.  
  7.       }
  8.       QAxObject *objWMIService = objIWbemLocator->querySubObject(
  9.               "ConnectServer(QString&,QString&)", //objWMIService - объявляем как переменную член класса, память выделяем в конструкторе
  10.               QString("."), QString("root\\cimv2")); // пространство имен. Если и домен и рабочая группа, можно прикрутить аутентификацию
  11.       if (!objWMIService) {
  12.         qDebug("WMIService not created");
  13.         delete objIWbemLocator;
  14.       }
  15.       QString query = QString( "SELECT * FROM Win32_PhysicalMemory"); // выбранный класс
  16.       QAxObject *objInterList = objWMIService->querySubObject(
  17.               "ExecQuery(QString&))", query);
  18.       if (!objInterList) {
  19.         qDebug("Answer from ExecQuery is null");
  20.         delete objIWbemLocator;
  21.       }
  22.       if (objInterList->dynamicCall("Count").toInt() == 0) {
  23.         qDebug("Count is 0");
  24.         delete objIWbemLocator;
  25.       }
  26.  
  27.     // И теперь самое интересное
  28.  
  29.       QAxObject *enum1 = objInterList->querySubObject("_NewEnum");
  30.       if (!enum1) {
  31.         qDebug("Query _NewEnum failed");
  32.         delete objIWbemLocator;
  33.       }
  34.       IEnumVARIANT* enumInterface = 0;
  35.       enum1->queryInterface(IID_IEnumVARIANT, (void**)&enumInterface);
  36.       if (!enumInterface) {
  37.         qDebug("Query interface failed");
  38.         delete objIWbemLocator;
  39.       }
  40.       enumInterface->Release();
  41.       QAxObject *item = 0;
  42.       for (int i = 0; i < objInterList->dynamicCall("Count").toInt(); i++) {
  43.         VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT));
  44.         if (enumInterface->Next(1,theItem,NULL) == S_FALSE) {
  45.           qDebug("enum next failed");
  46.           delete theItem;
  47.           delete objIWbemLocator;
  48.         }
  49.         item = new QAxObject((IUnknown*)theItem->punkVal);
  50.         if (!item) {
  51.           qDebug("getting result item failed");
  52.           delete theItem;
  53.           delete objIWbemLocator;
  54.         }
  55.         delete theItem;
  56.         int t;
  57. //        std::stringstream sstr;
  58.  
  59. //        ui->textEdit->setText(item->dynamicCall("Capacity").toString());
  60. //        std::string st;
  61. //        st = item->dynamicCall("Capacity").toString().toStdString();
  62.         QString st;
  63.         st=item->dynamicCall("Capacity").toString();
  64.         bool k;
  65.         int ska =atoi(st.toStdString().c_str());
  66. //        qDebug()<<st.c_str();
  67. //        sstr<<st.c_str();
  68. //        sstr>>t;
  69.        // t= std::stoi(st.c_str(), 0,10);
  70.        // qDebug()<<"число  "<<t;
  71.         ui->textEdit->setText(QString::number(ska));
  72.       }
  73.       delete objIWbemLocator;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement