Получить "wmic csproduct get UUID" в C ++ с помощью Code :: Blocks - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть приложение, которое работает в Windows и написано на c ++ и скомпилировано с WI IDE Code :: Blocks.

Я нашел этот код и обновил:

string GetUUID()
{
    FILE*  CommandResult = popen("wmic csproduct get uuid", "rt"); 
    char   line[256];
    while(fgets(line, 256, CommandResult)) printf(line); //read and print all lines one by one
    pclose(CommandResult);
return line;
}

Этокажется, что выходные данные находятся в двух строках http://prntscr.com/nhru9a Затем я проверил результат "line" с "cout message" и ничего не получил.

Есть ли рабочий / лучший способ перехватить uuidв строку вывода?

LE, решение, может быть улучшено, конечно:

string uuid( )
{

    std::array<char, 128> buffer;

    std::string result;

    char c[]= "for /f \"usebackq skip=1  tokens=*\" %i in (`wmic csproduct get uuid ^| findstr /r /v \"^$\"`) do @echo %i\"";

    std::unique_ptr<FILE, decltype(&_pclose)> pipe(_popen(c, "r"), _pclose);
    if (!pipe) {
        throw std::runtime_error("_popen() failed!");
    }
    while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
        result += buffer.data();
    }

    result.pop_back(); // delete last line

    string st;
    st = result.substr(0, result.size()-4); // delete last 4 charcters & spaces
    return st;

}
...