读书人

怎么获得主机的型号呢

发布时间: 2013-08-26 12:17:40 作者: rapoo

如何获得主机的型号呢?
现在可以获得机器的CPU,内存,IP等一些硬件信息,但我真正需要的是主机的型号,生产日期等信息,我看鲁大师或是驱动人生,能够获取主机的具体型号,当然主要是针对品牌机,不知道是如何做到的呢?



[解决办法]
用wmi,参考下面的链接,是我研究wmi时看的链接:
http://blog.csdn.net/zoufeiyy/article/details/1864312
http://blog.sina.com.cn/s/blog_555305900100c96q.html
http://www.cfanz.cn/index.php?c=article&a=read&id=73759 http://zhoufoxcn.blog.51cto.com/792419/169000/


function GetWMIProperty(WMIType, WMIProperty: string): string;
var
Wmi, Objs, Obj: OleVariant;
Enum: IEnumVariant;
C: Cardinal;
begin
Wmi:= CreateOleObject('WbemScripting.SWbemLocator');
Objs := Wmi.ConnectServer('.','root/cimv2').ExecQuery('Select * from Win32_' + WMIType);
Enum := IEnumVariant(IUnknown(Objs._NewEnum));
Enum.Reset;
Enum.Next(1, Obj, C);
Obj := Obj.Properties_.Item(WMIProperty, 0).Value;
if VarIsNull(Obj) then
Result := 'null'
else if VarIsArray(Obj) then Result:=Obj[0]
else Result := Obj;
end;

[解决办法]
再给你贴一份我测试的Demo:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ActiveX, ComObj;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;



var
Form1: TForm1;

implementation

uses
uSystem;

{$R *.dfm}

function GetWMIClass(StrClass: string): IEnumvariant;
function GetWMIObject(const objectName: string): IDispatch;
var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, BindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten,
Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;
var
objWMIService: OLEVariant;
colItems: OLEVariant;
begin
objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
colItems := objWMIService.ExecQuery
('SELECT * FROM ' + StrClass, 'WQL', 0);
Result := IUnknown(colItems._NewEnum) as IEnumvariant;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
Memo1.Lines.Add('DiskIndex: ' + GetWMIProperty('DiskPartition WHERE Bootable = TRUE', 'DiskIndex'));
except on e: exception do
Memo1.Lines.Add('DiskIndex Error: ' + e.Message);
end;

try
Memo1.Lines.Add('DiskDrive SerialNumber: ' + GetWMIProperty('DiskDrive WHERE Index = 0 ', 'SerialNumber'));
except on e: exception do
Memo1.Lines.Add('DiskDrive SerialNumber Error: ' + e.Message);
end;

try
Memo1.Lines.Add('DiskDrive PNPDeviceID: ' + GetWMIProperty('DiskDrive', 'PNPDeviceID'));
except on e: exception do
Memo1.Lines.Add('DiskDrive PNPDeviceID Error: ' + e.Message);
end;

try
Memo1.Lines.Add('BIOS SerialNumber: ' + GetWMIProperty('BIOS', 'SerialNumber'));
except on e: exception do
Memo1.Lines.Add('BIOS SerialNumber Error: ' + e.Message);
end;

try
Memo1.Lines.Add('BIOS PNPDeviceID: ' + GetWMIProperty('BIOS', 'PNPDeviceID'));


except on e: exception do
Memo1.Lines.Add('BIOS PNPDeviceID Error: ' + e.Message);
end;

try
Memo1.Lines.Add('BaseBoard SerialNumber: ' + GetWMIProperty('BaseBoard', 'SerialNumber'));
except on e: exception do
Memo1.Lines.Add('BaseBoard SerialNumber Error: ' + e.Message);
end;

{try
Memo1.Lines.Add('NetworkAdapter MACAddress: ' + GetWMIProperty('NetworkAdapter', 'MACAddress'));
except on e: exception do
Memo1.Lines.Add('NetworkAdapter MACAddress Error: ' + e.Message);
end;

try
Memo1.Lines.Add('NetworkAdapter PNPDeviceID: ' + GetWMIProperty('NetworkAdapter', 'PNPDeviceID'));
except on e: exception do
Memo1.Lines.Add('NetworkAdapter PNPDeviceID Error: ' + e.Message);
end;}

try
Memo1.Lines.Add('NetworkAdapter MACAddress: ' + GetWMIProperty('NetworkAdapter WHERE ((MACAddress IS NOT NULL) AND (Manufacturer <> ''Microsoft''))', 'MACAddress'));
except on e: exception do
Memo1.Lines.Add('NetworkAdapter MACAddress Error: ' + e.Message);
end;

try
Memo1.Lines.Add('NetworkAdapter PNPDeviceID: ' + GetWMIProperty('NetworkAdapter WHERE ((MACAddress IS NOT NULL) AND (Manufacturer <> ''Microsoft''))', 'PNPDeviceID'));
except on e: exception do
Memo1.Lines.Add('NetworkAdapter PNPDeviceID Error: ' + e.Message);
end;

try
Memo1.Lines.Add('Processor ID: ' + GetWMIProperty('Processor', 'ProcessorId'));
except on e: exception do
Memo1.Lines.Add('Processor ID Error: ' + e.Message);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
oEnum: IEnumvariant;
Item: OLEVariant;
iValue: LongWord;
begin
oEnum := GetWMIClass('Win32_NetworkAdapterConfiguration where IPEnabled=True');


while (oEnum.Next(1, Item, iValue) = 0) do
begin
Memo1.Lines.Add('MacAddress:' + VarToStr(Item.MACAddress));
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Lines.Add(GetIdeDiskSerialNumber);
end;

end.


[解决办法]
用下面的,记得uses ActiveX, ComObj



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ActiveX, ComObj;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function GetWMIProperty(WMIType, WMIProperty: string): string;
var
Wmi, Objs, Obj: OleVariant;
Enum: IEnumVariant;
C: Cardinal;
begin
Wmi:= CreateOleObject('WbemScripting.SWbemLocator');
Objs := Wmi.ConnectServer('.','root/cimv2').ExecQuery('Select * from Win32_' + WMIType);
Enum := IEnumVariant(IUnknown(Objs._NewEnum));
Enum.Reset;
Enum.Next(1, Obj, C);
Obj := Obj.Properties_.Item(WMIProperty, 0).Value;
if VarIsNull(Obj) then
Result := 'null'
else if VarIsArray(Obj) then Result:=Obj[0]
else Result := Obj;
end;

function GetWMIClass(StrClass: string): IEnumvariant;
function GetWMIObject(const objectName: string): IDispatch;
var
chEaten: Integer;
BindCtx: IBindCtx;


Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, BindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten,
Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;
var
objWMIService: OLEVariant;
colItems: OLEVariant;
begin
objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
colItems := objWMIService.ExecQuery
('SELECT * FROM ' + StrClass, 'WQL', 0);
Result := IUnknown(colItems._NewEnum) as IEnumvariant;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
Memo1.Lines.Add('DiskIndex: ' + GetWMIProperty('DiskPartition WHERE Bootable = TRUE', 'DiskIndex'));
except on e: exception do
Memo1.Lines.Add('DiskIndex Error: ' + e.Message);
end;

try
Memo1.Lines.Add('DiskDrive SerialNumber: ' + GetWMIProperty('DiskDrive WHERE Index = 0 ', 'SerialNumber'));
except on e: exception do
Memo1.Lines.Add('DiskDrive SerialNumber Error: ' + e.Message);
end;

try
Memo1.Lines.Add('DiskDrive PNPDeviceID: ' + GetWMIProperty('DiskDrive', 'PNPDeviceID'));
except on e: exception do
Memo1.Lines.Add('DiskDrive PNPDeviceID Error: ' + e.Message);
end;

try
Memo1.Lines.Add('BIOS SerialNumber: ' + GetWMIProperty('BIOS', 'SerialNumber'));
except on e: exception do
Memo1.Lines.Add('BIOS SerialNumber Error: ' + e.Message);
end;

try
Memo1.Lines.Add('BIOS PNPDeviceID: ' + GetWMIProperty('BIOS', 'PNPDeviceID'));
except on e: exception do
Memo1.Lines.Add('BIOS PNPDeviceID Error: ' + e.Message);
end;

try
Memo1.Lines.Add('BaseBoard SerialNumber: ' + GetWMIProperty('BaseBoard', 'SerialNumber'));


except on e: exception do
Memo1.Lines.Add('BaseBoard SerialNumber Error: ' + e.Message);
end;

{try
Memo1.Lines.Add('NetworkAdapter MACAddress: ' + GetWMIProperty('NetworkAdapter', 'MACAddress'));
except on e: exception do
Memo1.Lines.Add('NetworkAdapter MACAddress Error: ' + e.Message);
end;

try
Memo1.Lines.Add('NetworkAdapter PNPDeviceID: ' + GetWMIProperty('NetworkAdapter', 'PNPDeviceID'));
except on e: exception do
Memo1.Lines.Add('NetworkAdapter PNPDeviceID Error: ' + e.Message);
end;}

try
Memo1.Lines.Add('NetworkAdapter MACAddress: ' + GetWMIProperty('NetworkAdapter WHERE ((MACAddress IS NOT NULL) AND (Manufacturer <> ''Microsoft''))', 'MACAddress'));
except on e: exception do
Memo1.Lines.Add('NetworkAdapter MACAddress Error: ' + e.Message);
end;

try
Memo1.Lines.Add('NetworkAdapter PNPDeviceID: ' + GetWMIProperty('NetworkAdapter WHERE ((MACAddress IS NOT NULL) AND (Manufacturer <> ''Microsoft''))', 'PNPDeviceID'));
except on e: exception do
Memo1.Lines.Add('NetworkAdapter PNPDeviceID Error: ' + e.Message);
end;

try
Memo1.Lines.Add('Processor ID: ' + GetWMIProperty('Processor', 'ProcessorId'));
except on e: exception do
Memo1.Lines.Add('Processor ID Error: ' + e.Message);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
oEnum: IEnumvariant;
Item: OLEVariant;
iValue: LongWord;
begin
oEnum := GetWMIClass('Win32_NetworkAdapterConfiguration where IPEnabled=True');
while (oEnum.Next(1, Item, iValue) = 0) do
begin
Memo1.Lines.Add('MacAddress:' + VarToStr(Item.MACAddress));
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Lines.Add(GetIdeDiskSerialNumber);


end;

end.

读书人网 >.NET

热点推荐