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

解决方案 »

  1.   

    查了一些资料,好像是通过读取BIOS得到的,大家谁能够提供
    GetRomBiosString  
    具体详细说明呢?
      

  2.   

    http://www.cppfans.com/articles/system/bcb_wmi.asp 
      

  3.   

    看不懂哟,有没有DELPHI的呢?WINDOWS优化大师不是用DELPHI开发的吗?那上面就有硬件的一些信息。
      

  4.   

    用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;
      

  5.   

    再给你贴一份我测试的Demo:
    unit Unit1;interfaceuses
      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;implementationuses
      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.
      

  6.   

    MiTeC System Information v10.7.0
    找到了一个可以获取硬件信息的控件,但是在安装过程中提示有错误,郁闷!
      

  7.   

    uses
      uSystem;来自哪??
      

  8.   

    uSytem里面就这个函数
    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;
      

  9.   

    用下面的,记得uses ActiveX, ComObjunit Unit1;interfaceuses
      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.
      

  10.   

    虽然关键问题没有解决(主机型号),但还是感谢feiba7288的帮助。