У меня есть приложение, которое работает в 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;
}