关于API的问题向大家请教(获取机器的硬件信息) 请问怎么样实现获取电脑硬件信息如:CPU,网卡(MAC),硬盘,显卡…………请各位大侠多多指教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 WMI Tasks: Computer Hardwarehttp://msdn.microsoft.com/en-us/library/aa394587(VS.85).aspx 网摘如下一、获取CPU厂家信息Const CPUVendorIDs :array[0..5] of string = ('GenuineIntel','UMC UMC UMC','AuthenticAMD','CyrixInstead','NexGenDriven','CentaurHauls'); //将CPU厂家信息转换成字串形式 CPUVendors :array[0..5] of string = ('Intel','UMC','AMD','Cyrix','NexGen','CentaurHauls');type TVendor = array [0..11] of char;// 获取CPU厂家信息,返回值为TVendor类型function GetCPUVendor : TVendor; assembler; register;asm PUSH EBX PUSH EDI MOV EDI,EAX MOV EAX,0 DW $A20F //CPUID指令 MOV EAX,EBX XCHG EBX,ECX MOV ECX,4@1: STOSB SHR EAX,8 LOOP @1 MOV EAX,EDX MOV ECX,4@2: STOSB SHR EAX,8 LOOP @2 MOV EAX,EBX MOV ECX,4@3: STOSB SHR EAX,8 LOOP @3 POP EDI POP EBXend;调用方式: var Vendor: string; VendorID, I: integer;begin Vendor := GetCPUVendor; for i := 0 to High(CPUVendorIDs) do begin If Vendor = CPUVendorIDs[I] then begin Vendor := CPUVendors[I]; //把厂家信息精简一下,好看多了 VendorID := i; break; end; end;end; 二、获取CPU类型信息 const ID_BIT=$200000; //CPU ID 位标记type TCPUID=array[1..4] of Longint;//判断CPUID信息是否有效function IsCPUIDAvailable : Boolean; register; asm PUSHFD //不允许直接存取,必须通过堆栈 POP EAX MOV EDX,EAX XOR EAX,ID_BIT PUSH EAX POPFD PUSHFD POP EAX XOR EAX,EDX //检测ID位是否受影响 JZ @exit //CPUID无效 MOV AL,True //CPUID无效@exit:end;//获取CPUID信息,返回值为TCPUID类型function GetCPUID : TCPUID; assembler; register;asm PUSH EBX PUSH EDI MOV EDI,EAX MOV EAX,1 DW $A20F //CPUID指令 STOSD //CPUID[1] MOV EAX,EBX STOSD //CPUID[2] MOV EAX,ECX STOSD //CPUID[3] MOV EAX,EDX STOSD //CPUID[4] POP EDI POP EBXend;具体使用方法: const CPUSubModels: array[0..4] of string = ('Primary','OverDrive','Secondary','Reserved','Not Detected');var CPUID: TCPUID; SubModel: string; SubModelID, Family, Model, Stepping: Integer;begin //如果CPUID信息有效 if IsCPUIDAvailable then begin fillchar(CPUID, sizeof(CPUID), -1); CPUID := GetCPUID; SubModelID := CPUID[1] shr 12 and 3; Family := CPUID[1] shr 8 and $F; Model := CPUID[1] shr 4 and $F; Stepping:= CPUID[1] and $F; if SubModelID < 4 then SubModel := CPUSubModels[SubModelID] else SubModel := CPUSubModels[4]; end;end; 一条SQL语句!求教 tcp 和udp内网和外网的通信问题,请高手指点 大家帮帮看一下错在哪里?(分不够可以再加) 跟我联系要CRM代码的先生注意!! 因泡老板秘书被老板炒掉,现在无聊Ing,赚点小钱抽抽烟 谁知道,这里为什么把版面改的这么恶心?给分,给分…… 送分…… 有关窗口停靠的问题 请问大家是如何做数据备份和数据恢复的? 如何快速统计文件数? 请教高手:如何使双击标题栏也不能最大化窗口,也不能用拖动方式 87分 数据库中有时候会有重复的两条记录,而在程序中查询只能查出一条 想把memo里的内容赋值到edit里,怎么编?
http://msdn.microsoft.com/en-us/library/aa394587(VS.85).aspx
一、获取CPU厂家信息Const
CPUVendorIDs :array[0..5] of string = ('GenuineIntel','UMC UMC UMC','AuthenticAMD','CyrixInstead','NexGenDriven','CentaurHauls');
//将CPU厂家信息转换成字串形式
CPUVendors :array[0..5] of string = ('Intel','UMC','AMD','Cyrix','NexGen','CentaurHauls');type TVendor = array [0..11] of char;// 获取CPU厂家信息,返回值为TVendor类型
function GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX
PUSH EDI
MOV EDI,EAX
MOV EAX,0
DW $A20F //CPUID指令
MOV EAX,EBX
XCHG EBX,ECX
MOV ECX,4
@1:
STOSB
SHR EAX,8
LOOP @1
MOV EAX,EDX
MOV ECX,4
@2:
STOSB
SHR EAX,8
LOOP @2
MOV EAX,EBX
MOV ECX,4
@3:
STOSB
SHR EAX,8
LOOP @3
POP EDI
POP EBX
end;
调用方式:
var
Vendor: string;
VendorID, I: integer;
begin
Vendor := GetCPUVendor;
for i := 0 to High(CPUVendorIDs) do
begin
If Vendor = CPUVendorIDs[I] then
begin
Vendor := CPUVendors[I]; //把厂家信息精简一下,好看多了
VendorID := i;
break;
end;
end;
end;
二、获取CPU类型信息
const ID_BIT=$200000; //CPU ID 位标记
type TCPUID=array[1..4] of Longint;//判断CPUID信息是否有效
function IsCPUIDAvailable : Boolean; register;
asm
PUSHFD //不允许直接存取,必须通过堆栈
POP EAX
MOV EDX,EAX
XOR EAX,ID_BIT
PUSH EAX
POPFD
PUSHFD
POP EAX
XOR EAX,EDX //检测ID位是否受影响
JZ @exit //CPUID无效
MOV AL,True //CPUID无效
@exit:
end;//获取CPUID信息,返回值为TCPUID类型
function GetCPUID : TCPUID; assembler; register;
asm
PUSH EBX
PUSH EDI
MOV EDI,EAX
MOV EAX,1
DW $A20F //CPUID指令
STOSD //CPUID[1]
MOV EAX,EBX
STOSD //CPUID[2]
MOV EAX,ECX
STOSD //CPUID[3]
MOV EAX,EDX
STOSD //CPUID[4]
POP EDI
POP EBX
end;
具体使用方法:
const
CPUSubModels: array[0..4] of string = ('Primary','OverDrive','Secondary','Reserved','Not Detected');
var
CPUID: TCPUID;
SubModel: string;
SubModelID, Family, Model, Stepping: Integer;
begin
//如果CPUID信息有效
if IsCPUIDAvailable then
begin
fillchar(CPUID, sizeof(CPUID), -1);
CPUID := GetCPUID;
SubModelID := CPUID[1] shr 12 and 3;
Family := CPUID[1] shr 8 and $F;
Model := CPUID[1] shr 4 and $F;
Stepping:= CPUID[1] and $F;
if SubModelID < 4 then
SubModel := CPUSubModels[SubModelID]
else
SubModel := CPUSubModels[4];
end;
end;