zoukankan      html  css  js  c++  java
  • 基于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 = 'rootcimv2';
          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 := 'rootcimv2';
      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  RootCIMV2
    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 则几乎都没问题
  • 相关阅读:
    HTTP/1.1 Status Code Definitions
    宽带到底“宽不宽”
    tmux的简介及使用
    Simple Gesture – Fling
    使用postfix搭建匿名smtp服务器
    dos2unix和unix2dos命令使用 [〓 脚本功略 〓]
    Android Coding: Gestures Builder: create your gestures library
    Android Gesture 手势识别使用实例 Android mobile ITeye论坛
    使用socat进行端口转发
    notepad++在编辑python文件时以4个空格代替TAB
  • 原文地址:https://www.cnblogs.com/CodeGear/p/6476110.html
Copyright © 2011-2022 走看看