
CPUID指令是intel IA32架构下获得CPU信息的汇编指令,可以得到CPU类型,型号,制造商信息,商标信息,序列号,缓存等一系列CPU相关的东西。
比如生成查询CPU的制造商信息(Vender ID String)的代码:
string CPUID::GetVID(){
char cVID[13]; // 字符串,用来存储制造商信息
memset(cVID, 0, 13); // 把数组清0
Executecpuid(0); // 执行cpuid指令,使用输入参数 eax = 0
memcpy(cVID, &m_ebx, 4); // 复制前四个字符到数组
memcpy(cVID+4, &m_edx, 4); // 复制中间四个字符到数组
memcpy(cVID+8, &m_ecx, 4); // 复制最后四个字符到数组
return string(cVID); // 以string的形式返回
}
示例代码如下:
procedure TForm1Button1Click(Sender: TObject);type
TCPUID = array[14] of longint;
function GetCPUID: TCPUID;
asm
PUSH EBX
PUSH EDI
MOV EDI,EAX
MOV EAX,1
DW $A20F
STOSD
MOV EAX,EBX
STOSD
MOV EAX,ECX
STOSD
MOV EAX,EDX
STOSD
POP EDI
POP EBX
end;
var
aCpuId: TCpuID;
begin
aCpuId := GetCPUID;
ShowMessage('CPU 序列号是: ' + IntToHex(aCpuId[4],8) + IntToHex(aCpuId[1],8));
end;
代码运行截图:
与实际的对比:
///==============================获取CPU序列号========
package comtest;
import javaioIOException;
import javautilScanner;
public class CpuUtil {
public static void main(String[] args) throws IOException {
long start = SystemcurrentTimeMillis();
Process process = RuntimegetRuntime()exec(
new String[] { "wmic", "cpu", "get", "ProcessorId" });
processgetOutputStream()close();
Scanner sc = new Scanner(processgetInputStream());
String property = scnext();
String serial = scnext();
Systemoutprintln(property + ": " + serial);
Systemoutprintln("time:" + (SystemcurrentTimeMillis() - start));
}
}
//=======================获取硬盘序列号==========================
package comtest;
import javaioBufferedReader;
import javaioFile;
import javaioFileWriter;
import javaioInputStreamReader;
public class DiskUtil {
public static String getSerialNumber(String drive) {
String result = "";
try {
File file = FilecreateTempFile("realhowto","vbs");
filedeleteOnExit();
FileWriter fw = new javaioFileWriter(file);
String vbs = "Set objFSO = CreateObject(\"ScriptingFileSystemObject\")\n"
+"Set colDrives = objFSODrives\n"
+"Set objDrive = colDrivesitem(\"" + drive + "\")\n"
+"WscriptEcho objDriveSerialNumber"; // see note
fwwrite(vbs);
fwclose();
Process p = RuntimegetRuntime()exec("cscript //NoLogo " + filegetPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(pgetInputStream()));
String line;
while ((line = inputreadLine()) != null) {
result += line;
}
inputclose();
}
catch(Exception e){
eprintStackTrace();
}
return resulttrim();
}
public static void main(String[] args) {
String sn = DiskUtilgetSerialNumber("C");
Systemoutprintln(sn);
}
//=============================获取主板序列号====================
package comtest;
import javaioBufferedReader;
import javaioFile;
import javaioFileWriter;
import javaioInputStreamReader;
public class MiscUtil {
public static String getMotherboardSN() {
String result = "";
try {
File file = FilecreateTempFile("realhowto", "vbs");
filedeleteOnExit();
FileWriter fw = new javaioFileWriter(file);
String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\\\root\\cimv2\")\n"
+ "Set colItems = objWMIServiceExecQuery _ \n"
+ " (\"Select from Win32_BaseBoard\") \n"
+ "For Each objItem in colItems \n"
+ " WscriptEcho objItemSerialNumber \n"
+ " exit for ' do the first cpu only! \n" + "Next \n";
fwwrite(vbs);
fwclose();
Process p = RuntimegetRuntime()exec(
"cscript //NoLogo " + filegetPath());
BufferedReader input = new BufferedReader(new InputStreamReader(p
getInputStream()));
String line;
while ((line = inputreadLine()) != null) {
result += line;
}
inputclose();
} catch (Exception e) {
eprintStackTrace();
}
return resulttrim();
}
public static void main(String[] args) {
String cpuId = MiscUtilgetMotherboardSN();
Systemoutprintln(cpuId);
}
}
以上就是关于给定一个CPU型号,如何生成对应的cpuid指令注意不是获取是生成 !全部的内容,包括:给定一个CPU型号,如何生成对应的cpuid指令注意不是获取是生成 !、如何用 DELPHI 获取 CPU 的序列号、java 能不能获取CPU的ID号,硬盘的序列号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)