【问题标题】:C++ How do I pass a system serial number into a variable?C++ 如何将系统序列号传递给变量?
【发布时间】:2012-02-04 07:47:01
【问题描述】:

我已经能够检索我的系统序列号,但是如何将序列号本身传递到变量中?

    int main()
    {
        char newSerial;
        int (*ptr) (const char[]);

        ptr = system;

        ptr("wmic bios get serialnumber");      
    }

运行我的代码后,屏幕显示:

    SerialNumber
    xxxxxxxxxxxxx

就是这样。但我想要的只是将“x”传递给一个 char 变量,因为它有一个破折号。调用序列号的程序究竟是从哪里来的?有什么建议? (Windows 7 x64)

【问题讨论】:

  • 也许你想使用popen函数。
  • 此代码不能负责格式化显示的结果 - 没有打印语句。您无法直接访问系统调用的结果
  • @AShelly 1. 自己运行。 2. 然后转到您的 DOS 提示符并键入传递到我的 ptr 中的句子。 3. 也可以添加这一行:system("wmic bios get serialnumber");您将通过 3 种方式看到您的系统序列号。不要忘记将 stdlib 添加到您的“包含”列表中。
  • 对,但在所有这些情况下,打印结果的程序与您的程序不同。您无法从程序中直接访问序列号字符串。您可以构造系统调用以将结果重定向到您的程序可以读取的文本文件中,我猜。
  • @AShelly 我已经知道我无法直接访问计算机存储序列号的位置。

标签: windows variables serial-number wmic


【解决方案1】:

官方认可的通过 C++ 以编程方式访问 WMI 的方法是 COM API for WMI。具体见WMI C++ Application Examples下的例子。

另一方面,如果您想快速访问序列号,请在您的程序中添加以下内容:

system("wmic bios get serialnumber > sn.txt");
wchar_t sn[16];
FILE* fp = fopen("sn.txt","r, ccs=UTF-8");
fgetws(sn,16,fp); //dummy read of first line
fgetws(sn,16,fp); //now sn contains 2nd line

fclose(fp);          //cleanup temp file
remove("sn.txt");  

printf("The serial Number is: %ws\n",sn);

【讨论】:

    【解决方案2】:

    这是一种不使用文本文件的更好方法

    QProcess proc;
    //proc.start("cscript " + path, QIODevice::ReadWrite);
    proc.start("wmic bios get serialnumber",QIODevice::ReadWrite);
    //qDebug() << path;
    proc.waitForFinished();
    QString uID = proc.readAll();
    qDebug()<<uID; // serial number of the laptop
    

    【讨论】:

      【解决方案3】:
          ShellExecute(NULL, L"open", L"cmd.exe", L"/c wmic bios get serialnumber > sn.txt", NULL, SW_HIDE);
      
      wchar_t sn[16];
      FILE* fp = fopen("sn.txt","r, ccs=UTF-8");
      fgetws(sn,16,fp); //dummy read of first line
      fgetws(sn,16,fp); //now sn contains 2nd line
      
      fclose(fp);          //cleanup temp file
      remove("sn.txt");  
      
      printf("The serial Number is: %ws\n",sn);
      

      【讨论】:

        猜你喜欢
        • 2019-06-05
        • 1970-01-01
        • 2012-05-25
        • 2015-07-30
        • 2015-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多