使用Code :: Blocks在C ++中检索“ wmic csproduct get UUID”

时间:2019-04-27 22:04:19

标签: c++ gcc codeblocks wmic

我有一个在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;

}

0 个答案:

没有答案