我有一个在Windows中运行的应用程序,该应用程序是用c ++编写的,并使用WIDE 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上 然后,我用“提示消息”测试了结果“行”,但我什么也没得到。
是否有一种工作/更好的方法来将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;
}