码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-02-27 21:34:29      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:分区   logs   setw   select   windows域   lines   client   tco   设备   

晕!这个不是很简单的东西吗?
//---------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的信息查询和编辑,按微软的说明一般都是
Requirements
Minimum supported client  Windows Vista
Minimum supported server  Windows Server 2008
Namespace  Root\CIMV2
MOF  CIMWin32.mof
DLL  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的信息查询和编辑,按微软的说明一般都是

标签:分区   logs   setw   select   windows域   lines   client   tco   设备   

原文地址:http://www.cnblogs.com/CodeGear/p/6476110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!