首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么获得主机的型号呢

2013-08-26 
如何获得主机的型号呢?现在可以获得机器的CPU,内存,IP等一些硬件信息,但我真正需要的是主机的型号,生产日

如何获得主机的型号呢?
现在可以获得机器的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.

热点排行