QtはCPUシーケンス番号を取得し、親測定が利用可能
2582 ワード
前言
Windowsシステムの下でCPUのシリアル番号を取得するには、ネット上には多くの方法があり、C++を通じてwindowsを呼び出すインタフェースで実現することができますが、コードは複雑で、理解しにくく、成功するとは限りません.ここでは非常に簡単な方法でCPUシーケンス番号を取得し、Qtのインタフェースを通じて、コードは非常に簡単で、10行を超えない.(オリジナル:http://blog.csdn.net/luoyayun361/article/details/70837497)
本文
CPUシリアル番号を表示する方法は多く、コマンドラインでクエリーしたり、サードパーティのソフトウェアで表示したりすることができます.ここでは、プログラムでコマンドラインを実行することで取得します.ナイフQtを必要とする類Qprocess コードは以下の通りです
コードの最後の行は、出力された端末情報を処理して、最終的に個別のCPUシリアル番号情報を得る.
以上の方法では、一部のマシンで正常に取得できない場合があります.次に、CPUシーケンス番号を複雑な方法で取得します. ダイレクトコード
Windowsシステムの下でCPUのシリアル番号を取得するには、ネット上には多くの方法があり、C++を通じてwindowsを呼び出すインタフェースで実現することができますが、コードは複雑で、理解しにくく、成功するとは限りません.ここでは非常に簡単な方法でCPUシーケンス番号を取得し、Qtのインタフェースを通じて、コードは非常に簡単で、10行を超えない.(オリジナル:http://blog.csdn.net/luoyayun361/article/details/70837497)
本文
CPUシリアル番号を表示する方法は多く、コマンドラインでクエリーしたり、サードパーティのソフトウェアで表示したりすることができます.ここでは、プログラムでコマンドラインを実行することで取得します.ナイフQtを必要とする類Qprocess コードは以下の通りです
QString cpu_id = "";
QProcess p(0);
p.start("wmic CPU get ProcessorID"); p.waitForStarted();
p.waitForFinished();
cpu_id = QString::fromLocal8Bit(p.readAllStandardOutput());
cpu_id = cpu_id.remove("ProcessorId").trimmed();
コードの最後の行は、出力された端末情報を処理して、最終的に個別のCPUシリアル番号情報を得る.
以上の方法では、一部のマシンで正常に取得できない場合があります.次に、CPUシーケンス番号を複雑な方法で取得します. ダイレクトコード
static void getcpuid(unsigned int CPUInfo[4], unsigned int InfoType);
static void getcpuidex(unsigned int CPUInfo[4], unsigned int InfoType, unsigned int ECXValue);
static QString get_cpuId();
QString get_cpuId()
{
QString cpu_id = "";
unsigned int dwBuf[4]={0};
unsigned long long ret = 0;
getcpuid(dwBuf, 1);
ret = dwBuf[3];
ret = ret << 32;
QString str0 = QString::number(dwBuf[3], 16).toUpper();
QString str0_1 = str0.rightJustified(8,'0');// 0,
QString str1 = QString::number(dwBuf[0], 16).toUpper();
QString str1_1 = str1.rightJustified(8,'0');// 0,
//cpu_id = cpu_id + QString::number(dwBuf[0], 16).toUpper();
cpu_id = str0_1 + str1_1;
return cpu_id;
}
void getcpuid(unsigned int CPUInfo[4], unsigned int InfoType)
{
#if defined(__GNUC__)// GCC
__cpuid(InfoType, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);
#elif defined(_MSC_VER)// MSVC
#if _MSC_VER >= 1400 //VC2005 __cpuid
__cpuid((int*)(void*)CPUInfo, (int)(InfoType));
#else // getcpuidex
getcpuidex(CPUInfo, InfoType, 0);
#endif
#endif
}
void getcpuidex(unsigned int CPUInfo[4], unsigned int InfoType, unsigned int ECXValue)
{
#if defined(_MSC_VER) // MSVC
#if defined(_WIN64) // 64 . 1600: VS2010, VC2008 SP1 __cpuidex.
__cpuidex((int*)(void*)CPUInfo, (int)InfoType, (int)ECXValue);
#else
if (NULL==CPUInfo) return;
_asm{
// load. .
mov edi, CPUInfo;
mov eax, InfoType;
mov ecx, ECXValue;
// CPUID
cpuid;
// save. CPUInfo
mov [edi], eax;
mov [edi+4], ebx;
mov [edi+8], ecx;
mov [edi+12], edx;
}
#endif
#endif
}