首页 > 代码库 > 基于WMI的信息查询和编辑,按微软的说明一般都是

基于WMI的信息查询和编辑,按微软的说明一般都是

晕!这个不是很简单的东西吗?//---------WMI----------type  Rec_Wmi = record    ComputerName: string;    Namespace: string;    User: string;    Password: string;    WMIType: string;    Enum: IEnumVariant;    class function GetWmiEnum(WMIType: string; var AEnum: IEnumVariant; Namespace: string = root\cimv2;      Where: string = ‘‘; ComputerName: string = ‘‘; User: string = ‘‘; Password: string = ‘‘): string; static;    class function GetWMIProperty(Enum: IEnumVariant; WMIProperty: string; Index: integer = 0): OleVariant; static;    class function SetWMIProperty(Enum: IEnumVariant; WMIProperty: string; value: string; Index: integer = 0): string; static;    function GetEnum(Where: string = ‘‘): string;    function GetProperty(WMIProperty: string; Index: integer = 0): OleVariant;    function SetProperty(WMIProperty: string; value: string): string;  end;{ Rec_Wmi }function Rec_Wmi.GetEnum(Where: string): string;begin  if Self.ComputerName = ‘‘ then Self.ComputerName := .;  if Self.Namespace = ‘‘ then Self.Namespace := root\cimv2;  Result := GetWmiEnum(Self.WMIType, Self.Enum, Self.Namespace, Where, Self.ComputerName, Self.User, Self.Password);end;function Rec_Wmi.GetProperty(WMIProperty: string; Index: integer): OleVariant;begin  Result := TrueStr;  if VarIsNull(Self.Enum) then Result := Self.GetEnum;  if Result <> TrueStr then exit(‘‘);  Result := Self.GetWMIProperty(Self.Enum, WMIProperty, Index);end;class function Rec_Wmi.GetWmiEnum(WMIType: string; var AEnum: IEnumVariant; Namespace, Where, ComputerName, User, Password: string): string;var  Wmi, Objs : OleVariant;  sql: string;begin  Result := FalseStr;  try    if Where = ‘‘ then sql := Select * from  + WMIType    else sql := Select * from  + WMIType +  where  + Where;    if ComputerName = ‘‘ then ComputerName := .;    Wmi := CreateOleObject(WbemScripting.SWbemLocator);    if (User <> ‘‘) and (Password <> ‘‘) then Objs := Wmi.ConnectServer(ComputerName, Namespace, User, Password).ExecQuery(sql)    else Objs := Wmi.ConnectServer(ComputerName, Namespace).ExecQuery(sql);    if VarIsNull(Objs) then exit(未找到  + WMIType);    AEnum := IEnumVariant(IUnknown(Objs._NewEnum));    Result := TrueStr;  except    on E: Exception do Result := E.Message;  end;end;class function Rec_Wmi.GetWMIProperty(Enum: IEnumVariant; WMIProperty: string; Index: integer): OleVariant;var  obj: OleVariant;  C: Cardinal;  i: integer;  hr: HResult;begin  Result := null;  try    Enum.Reset;    i := 0;    while i <= index do      begin        hr := Enum.Next(1, obj, C);        inc(i);      end;    if (hr = S_OK) then Result := obj.Properties_.Item(WMIProperty, 0).value;  except    on E: Exception do Result := ‘‘;  end;end;function Rec_Wmi.SetProperty(WMIProperty, value: string): string;begin  Result := TrueStr;  if VarIsNull(Self.Enum) then Result := Self.GetEnum;  Result := Self.SetWMIProperty(Self.Enum, WMIProperty, value);end;class function Rec_Wmi.SetWMIProperty(Enum: IEnumVariant; WMIProperty, value: string; Index: integer): string;var  obj: OleVariant;  C: Cardinal;  i: integer;  hr: HResult;begin  Result := FalseStr;  try    Enum.Reset;    i := 0;    while i <= Index do      begin        hr := Enum.Next(1, obj, C);        inc(i);      end;    if (hr = S_OK) then      begin        obj.Properties_.Item(WMIProperty, 0).value := value;        obj.Put_;      end;    Result := TrueStr;  except    on E: Exception do Result := E.Message;  end;end;以上代码都是查阅微软文档后自己写的测试程序procedure TForm_Main.Button3Click(Sender: TObject);var  Awmi: Rec_Wmi;  devIndex: integer;  arrstr: array of string;  i: integer;  ov: OleVariant;begin  Memo_Info.Lines.Clear;  if Edit_Device_ID.text = ‘‘ then devIndex := 0  else devIndex := StrToInt(Edit_Device_ID.text);  Awmi.ComputerName := Edit_Database.text;  Awmi.User := Edit_User_Name.text;  Awmi.Password := Edit_PassWord.text;  Memo_Info.Lines.Add(-----物理设备--------);  Awmi.WMIType := Win32_PhysicalMedia;  Memo_Info.Lines.Add(GetEnum: + Awmi.GetEnum);  Memo_Info.Lines.Add(PhysicalMedia Caption : + vartostr(Awmi.GetProperty(Caption, devIndex)));  Memo_Info.Lines.Add(PhysicalMedia SerialNumber : + vartostr(Awmi.GetProperty(SerialNumber, devIndex)));  Memo_Info.Lines.Add(PhysicalMedia Description : + vartostr(Awmi.GetProperty(Description, devIndex)));  Memo_Info.Lines.Add(PhysicalMedia Name : + vartostr(Awmi.GetProperty(Name, devIndex)));  Memo_Info.Lines.Add(------物理盘-------);  Awmi.WMIType := Win32_DiskDrive;  Memo_Info.Lines.Add(GetEnum: + Awmi.GetEnum);  Memo_Info.Lines.Add(Win32_DiskDrive PNPDeviceID : + vartostr(Awmi.GetProperty(PNPDeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_DiskDrive SerialNumber : + vartostr(Awmi.GetProperty(SerialNumber, devIndex)));  Memo_Info.Lines.Add(Win32_DiskDrive Description : + vartostr(Awmi.GetProperty(Description, devIndex)));  Memo_Info.Lines.Add(Win32_DiskDrive DeviceID : + vartostr(Awmi.GetProperty(DeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_DiskDrive Name : + vartostr(Awmi.GetProperty(Name, devIndex)));  //  Memo_Info.Lines.Add(‘Win32_DiskDrive CapabilityDescriptions :‘ + Awmi.GetProperty(‘CapabilityDescriptions‘));  Memo_Info.Lines.Add(Win32_DiskDrive MediaType : + vartostr(Awmi.GetProperty(MediaType, devIndex)));  Memo_Info.Lines.Add(------磁盘分区-------);  Awmi.WMIType := Win32_DiskPartition;  Memo_Info.Lines.Add(GetEnum: + Awmi.GetEnum); //(‘ DeviceID =‘‘Z:‘‘‘));  Memo_Info.Lines.Add(Win32_DiskPartition Caption : + vartostr(Awmi.GetProperty(Caption, devIndex)));  Memo_Info.Lines.Add(Win32_DiskPartition Name : + vartostr(Awmi.GetProperty(Name, devIndex)));  Memo_Info.Lines.Add(Win32_DiskPartition Description : + vartostr(Awmi.GetProperty(Description)));  Memo_Info.Lines.Add(Win32_DiskPartition DeviceID : + vartostr(Awmi.GetProperty(DeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_DiskPartition DiskIndex : + vartostr(Awmi.GetProperty(DiskIndex, devIndex)));  Memo_Info.Lines.Add(Win32_DiskPartition Index : + vartostr(Awmi.GetProperty(Index, devIndex)));  Memo_Info.Lines.Add(Win32_DiskPartition PNPDeviceID : + vartostr(Awmi.GetProperty(PNPDeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_DiskPartition Purpose : + vartostr(Awmi.GetProperty(Purpose, devIndex)));  Memo_Info.Lines.Add(Win32_DiskPartition Size : + vartostr(Awmi.GetProperty(Size, devIndex)));  Memo_Info.Lines.Add(Win32_DiskPartition SystemName : + vartostr(Awmi.GetProperty(SystemName, devIndex)));  Memo_Info.Lines.Add(------逻辑盘-------);  Awmi.WMIType := Win32_LogicalDisk;  Memo_Info.Lines.Add(GetEnum: + Awmi.GetEnum); //(‘ DeviceID =‘‘Z:‘‘‘));  Memo_Info.Lines.Add(Win32_LogicalDisk PNPDeviceID : + vartostr(Awmi.GetProperty(PNPDeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_LogicalDisk Size : + vartostr(Awmi.GetProperty(Size)));  Memo_Info.Lines.Add(Win32_LogicalDisk DeviceID : + vartostr(Awmi.GetProperty(DeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_LogicalDisk VolumeName : + vartostr(Awmi.GetProperty(VolumeName, devIndex)));  Memo_Info.Lines.Add(Win32_LogicalDisk VolumeSerialNumber : + vartostr(Awmi.GetProperty(VolumeSerialNumber, devIndex)));  Memo_Info.Lines.Add(-----主板--------);  Awmi.WMIType := Win32_BaseBoard;  Memo_Info.Lines.Add(GetEnum: + Awmi.GetEnum);  Memo_Info.Lines.Add(Win32_BaseBoard SerialNumber : + vartostr(Awmi.GetProperty(SerialNumber)));  Memo_Info.Lines.Add(Win32_BaseBoard InstallDate : + vartostr(Awmi.GetProperty(InstallDate)));  Memo_Info.Lines.Add(Win32_BaseBoard Product : + vartostr(Awmi.GetProperty(Product)));  Memo_Info.Lines.Add(Win32_BaseBoard Manufacturer : + vartostr(Awmi.GetProperty(Manufacturer)));  Memo_Info.Lines.Add(Win32_BaseBoard Caption : + vartostr(Awmi.GetProperty(Caption)));  Memo_Info.Lines.Add(Win32_BaseBoard CreationClassName : + vartostr(Awmi.GetProperty(CreationClassName)));  Memo_Info.Lines.Add(Win32_BaseBoard Model : + vartostr(Awmi.GetProperty(Model)));  Memo_Info.Lines.Add(Win32_BaseBoard Name : + vartostr(Awmi.GetProperty(Name)));  Memo_Info.Lines.Add(Win32_BaseBoard PartNumber : + vartostr(Awmi.GetProperty(PartNumber)));  Memo_Info.Lines.Add(Win32_BaseBoard SlotLayout : + vartostr(Awmi.GetProperty(SlotLayout)));  Memo_Info.Lines.Add(Win32_BaseBoard Version : + vartostr(Awmi.GetProperty(Version)));  Memo_Info.Lines.Add(Win32_BaseBoard SKU : + vartostr(Awmi.GetProperty(SKU)));  Memo_Info.Lines.Add(Win32_BaseBoard OtherIdentifyingInfo : + vartostr(Awmi.GetProperty(OtherIdentifyingInfo)));  Memo_Info.Lines.Add(Win32_BaseBoard CreationClassName : + vartostr(Awmi.GetProperty(CreationClassName)));  Memo_Info.Lines.Add(-----BIOS--------);  Awmi.WMIType := Win32_BIOS;  Memo_Info.Lines.Add(GetEnum: + Awmi.GetEnum);  Memo_Info.Lines.Add(Win32_BIOS SerialNumber : + vartostr(Awmi.GetProperty(SerialNumber)));  Memo_Info.Lines.Add(Win32_BIOS TargetOperatingSystem : + vartostr(vartostr(Awmi.GetProperty(TargetOperatingSystem))));  Memo_Info.Lines.Add(Win32_BIOS Manufacturer : + vartostr(Awmi.GetProperty(Manufacturer)));  Memo_Info.Lines.Add(Win32_BIOS BuildNumber : + vartostr(Awmi.GetProperty(BuildNumber)));  Memo_Info.Lines.Add(Win32_BIOS InstallDate : + vartostr(Awmi.GetProperty(InstallDate)));  Memo_Info.Lines.Add(Win32_BIOS ReleaseDate : + vartostr(Awmi.GetProperty(ReleaseDate)));  Memo_Info.Lines.Add(Win32_BIOS Version : + vartostr(Awmi.GetProperty(Version)));  Memo_Info.Lines.Add(Win32_BIOS CodeSet : + vartostr(Awmi.GetProperty(CodeSet)));  Memo_Info.Lines.Add(Win32_BIOS BIOSVersion :);  ov := Awmi.GetProperty(CodeSet);  if not VarIsNull(ov) then    begin      if VarIsArray(ov) then        begin          for i := VarArrayLowBound(ov, 1) to VarArrayHighBound(ov, 1) do          begin          Memo_Info.Lines.Add(vartostr(VarArrayGet(ov, [i])));          end;        end    end;  Memo_Info.Lines.Add(-----网卡--------);  Awmi.WMIType := Win32_NetworkAdapter;  Memo_Info.Lines.Add(GetEnum: + Awmi.GetEnum(AdapterTypeID=0));  Memo_Info.Lines.Add(Win32_NetworkAdapter AdapterType : + vartostr(Awmi.GetProperty(AdapterType, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter name : + vartostr(Awmi.GetProperty(name, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter MACAddress : + vartostr(Awmi.GetProperty(MACAddress, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter Caption : + vartostr(Awmi.GetProperty(Caption, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter DeviceID : + vartostr(Awmi.GetProperty(DeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter Description : + vartostr(Awmi.GetProperty(Description, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter GUID : + vartostr(Awmi.GetProperty(GUID, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter Index : + vartostr(Awmi.GetProperty(Index, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter InterfaceIndex : + vartostr(Awmi.GetProperty(InterfaceIndex, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter Manufacturer : + vartostr(Awmi.GetProperty(Manufacturer, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter MaxSpeed : + vartostr(vartostr(Awmi.GetProperty(MaxSpeed, devIndex))));  Memo_Info.Lines.Add(Win32_NetworkAdapter Speed : + vartostr(Awmi.GetProperty(Speed, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter NetConnectionStatus : + vartostr(Awmi.GetProperty(NetConnectionStatus, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter PNPDeviceID : + vartostr(Awmi.GetProperty(PNPDeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter ProductName : + vartostr(Awmi.GetProperty(ProductName, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter ServiceName : + vartostr(Awmi.GetProperty(ServiceName, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter SystemName : + vartostr(Awmi.GetProperty(SystemName, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter PermanentAddress : + vartostr(Awmi.GetProperty(PermanentAddress, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapter NetworkAddresses :);  ov := Awmi.GetProperty(NetworkAddresses, devIndex);  if not VarIsNull(ov) then    begin      if VarIsArray(ov) then        begin          for i := VarArrayLowBound(ov, 1) to VarArrayHighBound(ov, 1) do          begin          Memo_Info.Lines.Add(vartostr(VarArrayGet(ov, [i])));          end;        end    end;  Memo_Info.Lines.Add(-----网卡设置--------);  Awmi.WMIType := Win32_NetworkAdapterConfiguration;  Memo_Info.Lines.Add(GetEnum: + Awmi.GetEnum(IPEnabled=True));  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration Properties : + vartostr(Awmi.GetProperty(Properties, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration Caption : + vartostr(Awmi.GetProperty(Caption, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration Description : + vartostr(Awmi.GetProperty(Description, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration DNSDomain : + vartostr(Awmi.GetProperty(DNSDomain, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration DNSHostName : + vartostr(Awmi.GetProperty(DNSHostName, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration Index : + vartostr(Awmi.GetProperty(Index, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration InterfaceIndex : + vartostr(Awmi.GetProperty(InterfaceIndex, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration MACAddress : + vartostr(Awmi.GetProperty(MACAddress, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration ServiceName : + vartostr(Awmi.GetProperty(ServiceName, devIndex)));  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration DefaultIPGateway :);  ov := Awmi.GetProperty(DefaultIPGateway, devIndex);  if not VarIsNull(ov) then    begin      if VarIsArray(ov) then        begin          for i := VarArrayLowBound(ov, 1) to VarArrayHighBound(ov, 1) do          begin          Memo_Info.Lines.Add(vartostr(VarArrayGet(ov, [i])));          end;        end    end;  Memo_Info.Lines.Add(Win32_NetworkAdapterConfiguration IPAddress :);  ov := (Awmi.GetProperty(IPAddress, devIndex));  if not VarIsNull(ov) then    begin      if VarIsArray(ov) then        begin          for i := VarArrayLowBound(ov, 1) to VarArrayHighBound(ov, 1) do          begin          Memo_Info.Lines.Add(vartostr(VarArrayGet(ov, [i])));          end;        end    end;  Memo_Info.Lines.Add(-----CPU--------);  Awmi.WMIType := Win32_Processor;  Memo_Info.Lines.Add(GetEnum: + Awmi.GetEnum); //(‘IPEnabled=True‘));  Memo_Info.Lines.Add(Win32_Processor ProcessorId : + vartostr(Awmi.GetProperty(ProcessorId, devIndex)));  Memo_Info.Lines.Add(Win32_Processor SerialNumber : + vartostr(Awmi.GetProperty(SerialNumber, devIndex)));  Memo_Info.Lines.Add(Win32_Processor Version : + vartostr(Awmi.GetProperty(Version, devIndex)));  Memo_Info.Lines.Add(Win32_Processor UniqueId : + vartostr(Awmi.GetProperty(UniqueId, devIndex)));  Memo_Info.Lines.Add(Win32_Processor SystemName : + vartostr(Awmi.GetProperty(SystemName, devIndex)));  Memo_Info.Lines.Add(Win32_Processor Name : + vartostr(Awmi.GetProperty(Name, devIndex)));  Memo_Info.Lines.Add(Win32_Processor Description : + vartostr(Awmi.GetProperty(Description, devIndex)));  Memo_Info.Lines.Add(Win32_Processor Caption : + vartostr(Awmi.GetProperty(Caption, devIndex)));  Memo_Info.Lines.Add(Win32_Processor DeviceID : + vartostr(Awmi.GetProperty(DeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_Processor CreationClassName : + vartostr(Awmi.GetProperty(CreationClassName, devIndex)));  Memo_Info.Lines.Add(Win32_Processor Manufacturer : + vartostr(Awmi.GetProperty(Manufacturer, devIndex)));  Memo_Info.Lines.Add(Win32_Processor NumberOfCores : + vartostr(Awmi.GetProperty(NumberOfCores, devIndex)));  Memo_Info.Lines.Add(Win32_Processor ThreadCount : + vartostr(Awmi.GetProperty(ThreadCount, devIndex)));  Memo_Info.Lines.Add(-----显卡-------);  Awmi.WMIType := Win32_VideoController;  Memo_Info.Lines.Add(GetEnum: + Awmi.GetEnum); //(‘IPEnabled=True‘));  Memo_Info.Lines.Add(Win32_VideoController name : + vartostr(Awmi.GetProperty(name, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController Description : + vartostr(Awmi.GetProperty(Description, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController Caption : + vartostr(Awmi.GetProperty(Caption, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController DeviceID : + vartostr(Awmi.GetProperty(DeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController CreationClassName : + vartostr(Awmi.GetProperty(CreationClassName, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController PNPDeviceID : + vartostr(Awmi.GetProperty(PNPDeviceID, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController SystemName : + vartostr(Awmi.GetProperty(SystemName, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController VideoModeDescription : + vartostr(Awmi.GetProperty(VideoModeDescription, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController VideoProcessor : + vartostr(Awmi.GetProperty(VideoProcessor, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController SystemCreationClassName : + vartostr(Awmi.GetProperty(SystemCreationClassName, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController AdapterCompatibility : + vartostr(Awmi.GetProperty(AdapterCompatibility, devIndex)));  Memo_Info.Lines.Add(Win32_VideoController AdapterDACType : + vartostr(Awmi.GetProperty(AdapterDACType, devIndex)));end;

 

 

基于WMI的信息查询和编辑,按微软的说明一般都是RequirementsMinimum supported client  Windows VistaMinimum supported server  Windows Server 2008Namespace  Root\CIMV2MOF  CIMWin32.mofDLL  CIMWin32.dll操作系统能读到的信息,都能读到.内容丰富的撑到爆.在windows域环境下,wmi是可以查看域内任意计算机信息的,不限于本机,当然需要你有相应域权限.具体可msdn.microsoft.com搜索比如磁盘的:https://msdn.microsoft.com/en-us/library/aa394132%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396操作系统的:https://msdn.microsoft.com/en-us/library/dn792258(v=vs.85).aspx基本上windows整个体系方方面面统统可以用此方法读取和操作.这也是微软未来的方向,以前的单个api系统会慢慢被wmi统一掉.当然XP对很多wmi不支持,Windows Vista 则几乎都没问题

 

基于WMI的信息查询和编辑,按微软的说明一般都是