Python模块 _winreg操作注册表
用python操作修改windows注册表,显然要比用C或者C++简单。
主要参考资料:官方文档:https://docs.python.org/zh-cn/3/library/winreg.html
通过python操作注册表主要有两种方式,一种是通过python的内置模块_winreg,另一种方式就是Win32ExtensionForPython的win32api模块。这里主要简单看看用内置模块_winreg如何操作注册表。
1.读取
读取用的方法是OpenKey方法:打开特定的key
_winreg.OpenKey(key,sub_key,res=0,sam=KEY_READ)
例子:此例子是显示了本机网络配置的一些注册表项
#!/usr/bin/envpython #coding=utf-8 import_winreg key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,r"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{0E184877-D910-4877-B4C2-04F487B6DBB7}") #获取该键的所有键值,遍历枚举 try: i=0 while1: #EnumValue方法用来枚举键值,EnumKey用来枚举子键 name,value,type=_winreg.EnumValue(key,i) printrepr(name),value,type i+=1 exceptWindowsError: print #假如知道键名,也可以直接取值 value,type=_winreg.QueryValueEx(key,"DhcpDefaultGateway") print"默认网关地址----",value,type
运行的结果如下:
'UseZeroBroadcast'04
'EnableDeadGWDetect'14
'EnableDHCP'14
'IPAddress'[u'0.0.0.0']7
'SubnetMask'[u'0.0.0.0']7
'DefaultGateway'[]7
'DefaultGatewayMetric'[]7
'NameServer'10.0.0.101
'Domain'1
'RegistrationEnabled'14
'RegisterAdapterName'04
'TCPAllowedPorts'[u'0']7
'UDPAllowedPorts'[u'0']7
'RawIPAllowedProtocols'[u'0']7
'NTEContextList'[u'0x00000004']7
'DhcpClassIdBin'None3
'DhcpServer'10.104.4.11
'Lease'9072004
'LeaseObtainedTime'12641221134
'T1'12645757134
'T2'12649159134
'LeaseTerminatesTime'12650293134
'IPAutoconfigurationAddress'0.0.0.01
'IPAutoconfigurationMask'255.255.0.01
'IPAutoconfigurationSeed'04
'AddressType'04
'IsServerNapAware'04
'DhcpIPAddress'10.104.5.151
'DhcpSubnetMask'255.255.254.01
'DhcpRetryTime'4535984
'DhcpRetryStatus'04
'DhcpNameServer'10.0.0.101
'DhcpDefaultGateway'[u'10.104.4.1']7
'DhcpSubnetMaskOpt'[u'255.255.254.0']7
默认网关地址----[u'10.104.4.1']7
2.创建修改注册表
创建key:_winreg.CreateKey(key,sub_key)
删除key:_winreg.DeleteKey(key,sub_key)
删除键值:_winreg.DeleteValue(key,value)
给新建的key赋值:_winreg.SetValue(key,sub_key,type,value)
例子:
#!/usr/bin/envpython #coding=utf-8 import_winreg key=_winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer") #删除键 _winreg.DeleteKey(key,"Advanced") #删除键值 _winreg.DeleteValue(key,"IconUnderline") #创建新的 newKey=_winreg.CreateKey(key,"MyNewkey") #给新创建的键添加键值 _winreg.SetValue(newKey,"ValueName",0,"ValueContent")
在python3以上,_winreg已经变成了winreg
winreg---Windows注册表访问
这些函数将Windows注册表API暴露给Python。为了确保即便程序员忽略了显式关闭句柄,该句柄依然能够正确关闭,它使用了一个 handle对象 而不是整数来作为注册表句柄。
在3.3版更改: 该模块中的几个函数被用于引发 WindowsError,该异常现在是 OSError 的别名。
函数
该模块提供了下列函数:
winreg.CloseKey(hkey)
关闭之前打开的注册表键。参数hkey指之前打开的键。
注解
如果没有使用该方法关闭hkey(或者通过hkey.Close()),在对象hkey被Python销毁时会将其关闭。
winreg.ConnectRegistry(computer_name,key)
建立到另一台计算上上的预定义注册表句柄的连接,并返回一个handle对象.
computer_name是远程计算机的名称,以r"\\computername"的形式。如果是None,将会使用本地计算机。
key是所连接到的预定义句柄。
返回值是所开打键的句柄。如果函数失败,则引发一个OSError异常。
引发一个审计事件winreg.ConnectRegistry,附带参数computer_name,key。
winreg.CreateKey(key,sub_key)
创建或打开特定的键,返回一个handle对象。
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
sub_key是用于命名该方法所打开或创建的键的字符串。
如果key是预定义键之一,sub_key可能会是None。该情况下,返回的句柄就是传入函数的句柄。
如果键已经存在,则该函数打开已经存在的该键。
返回值是所开打键的句柄。如果函数失败,则引发一个OSError异常。
引发一个审计事件winreg.CreateKey,附带参数key,sub_key,access。
引发一个审计事件winreg.OpenKey/result,附带参数key。
winreg.CreateKeyEx(key,sub_key,reserved=0,access=KEY_WRITE)
创建或打开特定的键,返回一个handle对象。
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
sub_key是用于命名该方法所打开或创建的键的字符串。
reserved是一个保留的证书,必须是零。默认值为零。
access为一个整数,用于给键的预期安全访问指定访问掩码。默认值为KEY_WRITE。参阅AccessRights了解其它允许值。
如果key是预定义键之一,sub_key可能会是None。该情况下,返回的句柄就是传入函数的句柄。
如果键已经存在,则该函数打开已经存在的该键。
返回值是所开打键的句柄。如果函数失败,则引发一个OSError异常。
引发一个审计事件winreg.CreateKey,附带参数key,sub_key,access。
引发一个审计事件winreg.OpenKey/result,附带参数key。
3.2新版功能.
winreg.DeleteKey(key,sub_key)
删除指定的键。
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
sub_key这个字符串必须是由key参数所指定键的一个子项。该值项不可以是None,同时键也不可以有子项。
该方法不能删除带有子项的键。
如果方法成功,则整个键,包括其所有值项都会被移除。如果方法失败,则引发一个OSError异常。
引发一个审计事件winreg.DeleteKey,附带参数key,sub_key,access。
winreg.DeleteKeyEx(key,sub_key,access=KEY_WOW64_64KEY,reserved=0)
删除指定的键。
注解
函数DeleteKeyEx()通过RegDeleteKeyEx这个WindowsAPI函数实现,该函数为Windows的64位版本专属。参阅RegDeleteKeyEx文档。
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
sub_key这个字符串必须是由key参数所指定键的一个子项。该值项不可以是None,同时键也不可以有子项。
reserved是一个保留的证书,必须是零。默认值为零。
access为一个整数,用于给键的预期安全访问指定访问掩码。默认值为常量_WOW64_64KEY。参阅AccessRights了解其它允许值。
该方法不能删除带有子项的键。
如果方法成功,则整个键,包括其所有值项都会被移除。如果方法失败,则引发一个OSError异常。
在不支持的Windows版本之上,将会引发NotImplementedError异常。
引发一个审计事件winreg.DeleteKey,附带参数key,sub_key,access。
3.2新版功能.
winreg.DeleteValue(key,value)
从某个注册键中删除一个命名值项。
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
value为标识所要删除值项的字符串。
引发一个审计事件winreg.DeleteValue,附带参数key,value。
winreg.EnumKey(key,index)
列举某个已经打开注册表键的子项,并返回一个字符串。
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
index为一个整数,用于标识所获取键的索引。
每次调用该函数都会获取一个子项的名字。通常它会被反复调用,直到引发OSError异常,这说明已经没有更多的可用值了。
引发一个审计事件winreg.EnumKey,附带参数key,index。
在3.3版更改:参考上文。
winreg.EnumValue(key,index)
列举某个已经打开注册表键的值项,并返回一个元组。
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
index为一个整数,用于标识要获取值项的索引。
每次调用该函数都会获取一个子项的名字。通常它会被反复调用,直到引发OSError异常,这说明已经没有更多的可用值了。
结果为3元素的元组。
索引 |
意义 |
---|---|
0 |
用于标识值项名称的字符串。 |
1 |
保存值项数据的对象,其类型取决于背后的注册表类型。 |
2 |
标识值项数据类型的整数。(请查阅 SetValueEx() 文档中的表格) |
引发一个审计事件winreg.EnumValue,附带参数key,index。
在3.3版更改:参考上文。
winreg.ExpandEnvironmentStrings(str)
Expandsenvironmentvariableplaceholders%NAME%instringslikeREG_EXPAND_SZ:
>>>
>>>ExpandEnvironmentStrings('%windir%')
'C:\\Windows'
引发一个审计事件winreg.ExpandEnvironmentStrings,附带参数str。
winreg.FlushKey(key)
将某个键的所有属性写入注册表。
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
ItisnotnecessarytocallFlushKey()tochangeakey.Registrychangesareflushedtodiskbytheregistryusingitslazyflusher.Registrychangesarealsoflushedtodiskatsystemshutdown.UnlikeCloseKey(),theFlushKey()methodreturnsonlywhenallthedatahasbeenwrittentotheregistry.AnapplicationshouldonlycallFlushKey()ifitrequiresabsolutecertaintythatregistrychangesareondisk.
注解Ifyoudon'tknowwhetheraFlushKey()callisrequired,itprobablyisn't.
winreg.LoadKey(key,sub_key,file_name)
Createsasubkeyunderthespecifiedkeyandstoresregistrationinformationfromaspecifiedfileintothatsubkey.
keyisahandlereturnedbyConnectRegistry()oroneoftheconstantsHKEY_USERSorHKEY_LOCAL_MACHINE.
sub_keyisastringthatidentifiesthesubkeytoload.
file_nameisthenameofthefiletoloadregistrydatafrom.ThisfilemusthavebeencreatedwiththeSaveKey()function.Underthefileallocationtable(FAT)filesystem,thefilenamemaynothaveanextension.
AcalltoLoadKey()failsifthecallingprocessdoesnothavetheSE_RESTORE_PRIVILEGEprivilege.Notethatprivilegesaredifferentfrompermissions--seetheRegLoadKeydocumentationformoredetails.
IfkeyisahandlereturnedbyConnectRegistry(),thenthepathspecifiedinfile_nameisrelativetotheremotecomputer.
引发一个审计事件winreg.LoadKey,附带参数key,sub_key,file_name。
winreg.OpenKey(key,sub_key,reserved=0,access=KEY_READ)
winreg.OpenKeyEx(key,sub_key,reserved=0,access=KEY_READ)
Opensthespecifiedkey,returningahandleobject.
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
sub_keyisastringthatidentifiesthesub_keytoopen.
reservedisareservedinteger,andmustbezero.Thedefaultiszero.
accessisanintegerthatspecifiesanaccessmaskthatdescribesthedesiredsecurityaccessforthekey.DefaultisKEY_READ.SeeAccessRightsforotherallowedvalues.
Theresultisanewhandletothespecifiedkey.
Ifthefunctionfails,OSErrorisraised.
引发一个审计事件winreg.OpenKey,附带参数key,sub_key,access。
引发一个审计事件winreg.OpenKey/result,附带参数key。
在3.2版更改:Allowtheuseofnamedarguments.
在3.3版更改:参考上文。
winreg.QueryInfoKey(key)
Returnsinformationaboutakey,asatuple.
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
结果为3元素的元组。
索引
意义
0
Anintegergivingthenumberofsubkeysthiskeyhas.
1
Anintegergivingthenumberofvaluesthiskeyhas.
2
Anintegergivingwhenthekeywaslastmodified(ifavailable)as100'sofnanosecondssinceJan1,1601.
引发一个审计事件winreg.QueryInfoKey,附带参数key。
winreg.QueryValue(key,sub_key)
Retrievestheunnamedvalueforakey,asastring.
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
sub_keyisastringthatholdsthenameofthesubkeywithwhichthevalueisassociated.IfthisparameterisNoneorempty,thefunctionretrievesthevaluesetbytheSetValue()methodforthekeyidentifiedbykey.
Valuesintheregistryhavename,type,anddatacomponents.Thismethodretrievesthedataforakey'sfirstvaluethathasaNULLname.ButtheunderlyingAPIcalldoesn'treturnthetype,soalwaysuseQueryValueEx()ifpossible.
引发一个审计事件winreg.QueryValue,附带参数key,sub_key,value_name。
winreg.QueryValueEx(key,value_name)
Retrievesthetypeanddataforaspecifiedvaluenameassociatedwithanopenregistrykey.
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
value_nameisastringindicatingthevaluetoquery.
Theresultisatupleof2items:
索引
意义
0
Thevalueoftheregistryitem.
1
Anintegergivingtheregistrytypeforthisvalue(seetableindocsforSetValueEx())
引发一个审计事件winreg.QueryValue,附带参数key,sub_key,value_name。
winreg.SaveKey(key,file_name)
Savesthespecifiedkey,andallitssubkeystothespecifiedfile.
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
file_nameisthenameofthefiletosaveregistrydatato.Thisfilecannotalreadyexist.Ifthisfilenameincludesanextension,itcannotbeusedonfileallocationtable(FAT)filesystemsbytheLoadKey()method.
Ifkeyrepresentsakeyonaremotecomputer,thepathdescribedbyfile_nameisrelativetotheremotecomputer.ThecallerofthismethodmustpossesstheSeBackupPrivilegesecurityprivilege.Notethatprivilegesaredifferentthanpermissions--seetheConflictsBetweenUserRightsandPermissionsdocumentationformoredetails.
ThisfunctionpassesNULLforsecurity_attributestotheAPI.
引发一个审计事件winreg.SaveKey,附带参数key,file_name。
winreg.SetValue(key,sub_key,type,value)
Associatesavaluewithaspecifiedkey.
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
sub_keyisastringthatnamesthesubkeywithwhichthevalueisassociated.
typeisanintegerthatspecifiesthetypeofthedata.CurrentlythismustbeREG_SZ,meaningonlystringsaresupported.UsetheSetValueEx()functionforsupportforotherdatatypes.
valueisastringthatspecifiesthenewvalue.
Ifthekeyspecifiedbythesub_keyparameterdoesnotexist,theSetValuefunctioncreatesit.
Valuelengthsarelimitedbyavailablememory.Longvalues(morethan2048bytes)shouldbestoredasfileswiththefilenamesstoredintheconfigurationregistry.Thishelpstheregistryperformefficiently.
ThekeyidentifiedbythekeyparametermusthavebeenopenedwithKEY_SET_VALUEaccess.
引发一个审计事件winreg.SetValue,附带参数key,sub_key,type,value。
winreg.SetValueEx(key,value_name,reserved,type,value)
Storesdatainthevaluefieldofanopenregistrykey.
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
value_nameisastringthatnamesthesubkeywithwhichthevalueisassociated.
reservedcanbeanything--zeroisalwayspassedtotheAPI.
typeisanintegerthatspecifiesthetypeofthedata.SeeValueTypesfortheavailabletypes.
valueisastringthatspecifiesthenewvalue.
Thismethodcanalsosetadditionalvalueandtypeinformationforthespecifiedkey.ThekeyidentifiedbythekeyparametermusthavebeenopenedwithKEY_SET_VALUEaccess.
Toopenthekey,usetheCreateKey()orOpenKey()methods.
Valuelengthsarelimitedbyavailablememory.Longvalues(morethan2048bytes)shouldbestoredasfileswiththefilenamesstoredintheconfigurationregistry.Thishelpstheregistryperformefficiently.
引发一个审计事件winreg.SetValue,附带参数key,sub_key,type,value。
winreg.DisableReflectionKey(key)
Disablesregistryreflectionfor32-bitprocessesrunningona64-bitoperatingsystem.
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
WillgenerallyraiseNotImplementedErrorifexecutedona32-bitoperatingsystem.
Ifthekeyisnotonthereflectionlist,thefunctionsucceedsbuthasnoeffect.Disablingreflectionforakeydoesnotaffectreflectionofanysubkeys.
引发一个审计事件winreg.DisableReflectionKey,附带参数key。
winreg.EnableReflectionKey(key)
Restoresregistryreflectionforthespecifieddisabledkey.
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
WillgenerallyraiseNotImplementedErrorifexecutedona32-bitoperatingsystem.
Restoringreflectionforakeydoesnotaffectreflectionofanysubkeys.
引发一个审计事件winreg.EnableReflectionKey,附带参数key。
winreg.QueryReflectionKey(key)
Determinesthereflectionstateforthespecifiedkey.
key为某个已经打开的键,或者预定义的HKEY_*常量之一。
ReturnsTrueifreflectionisdisabled.
WillgenerallyraiseNotImplementedErrorifexecutedona32-bitoperatingsystem.
引发一个审计事件winreg.QueryReflectionKey,附带参数key。
常数
Thefollowingconstantsaredefinedforuseinmany_winregfunctions.
HKEY_*Constants
winreg.HKEY_CLASSES_ROOT
Registryentriessubordinatetothiskeydefinetypes(orclasses)ofdocumentsandthepropertiesassociatedwiththosetypes.ShellandCOMapplicationsusetheinformationstoredunderthiskey.
winreg.HKEY_CURRENT_USER
Registryentriessubordinatetothiskeydefinethepreferencesofthecurrentuser.Thesepreferencesincludethesettingsofenvironmentvariables,dataaboutprogramgroups,colors,printers,networkconnections,andapplicationpreferences.
winreg.HKEY_LOCAL_MACHINE
Registryentriessubordinatetothiskeydefinethephysicalstateofthecomputer,includingdataaboutthebustype,systemmemory,andinstalledhardwareandsoftware.
winreg.HKEY_USERS
Registryentriessubordinatetothiskeydefinethedefaultuserconfigurationfornewusersonthelocalcomputerandtheuserconfigurationforthecurrentuser.
winreg.HKEY_PERFORMANCE_DATA
Registryentriessubordinatetothiskeyallowyoutoaccessperformancedata.Thedataisnotactuallystoredintheregistry;theregistryfunctionscausethesystemtocollectthedatafromitssource.
winreg.HKEY_CURRENT_CONFIG
Containsinformationaboutthecurrenthardwareprofileofthelocalcomputersystem.
winreg.HKEY_DYN_DATA
ThiskeyisnotusedinversionsofWindowsafter98.
AccessRights
Formoreinformation,seeRegistryKeySecurityandAccess.
winreg.KEY_ALL_ACCESS
CombinestheSTANDARD_RIGHTS_REQUIRED,KEY_QUERY_VALUE,KEY_SET_VALUE,KEY_CREATE_SUB_KEY,KEY_ENUMERATE_SUB_KEYS,KEY_NOTIFY,andKEY_CREATE_LINKaccessrights.
winreg.KEY_WRITE
CombinestheSTANDARD_RIGHTS_WRITE,KEY_SET_VALUE,andKEY_CREATE_SUB_KEYaccessrights.
winreg.KEY_READ
CombinestheSTANDARD_RIGHTS_READ,KEY_QUERY_VALUE,KEY_ENUMERATE_SUB_KEYS,andKEY_NOTIFYvalues.
winreg.KEY_EXECUTE
EquivalenttoKEY_READ.
winreg.KEY_QUERY_VALUE
Requiredtoquerythevaluesofaregistrykey.
winreg.KEY_SET_VALUE
Requiredtocreate,delete,orsetaregistryvalue.
winreg.KEY_CREATE_SUB_KEY
Requiredtocreateasubkeyofaregistrykey.
winreg.KEY_ENUMERATE_SUB_KEYS
Requiredtoenumeratethesubkeysofaregistrykey.
winreg.KEY_NOTIFY
Requiredtorequestchangenotificationsforaregistrykeyorforsubkeysofaregistrykey.
winreg.KEY_CREATE_LINK
Reservedforsystemuse.
64-bitSpecific
Formoreinformation,seeAccessinganAlternateRegistryView.
winreg.KEY_WOW64_64KEY
Indicatesthatanapplicationon64-bitWindowsshouldoperateonthe64-bitregistryview.
winreg.KEY_WOW64_32KEY
Indicatesthatanapplicationon64-bitWindowsshouldoperateonthe32-bitregistryview.
ValueTypes
Formoreinformation,seeRegistryValueTypes.
winreg.REG_BINARY
Binarydatainanyform.
winreg.REG_DWORD
32-bitnumber.
winreg.REG_DWORD_LITTLE_ENDIAN
A32-bitnumberinlittle-endianformat.EquivalenttoREG_DWORD.
winreg.REG_DWORD_BIG_ENDIAN
A32-bitnumberinbig-endianformat.
winreg.REG_EXPAND_SZ
Null-terminatedstringcontainingreferencestoenvironmentvariables(%PATH%).
winreg.REG_LINK
AUnicodesymboliclink.
winreg.REG_MULTI_SZ
Asequenceofnull-terminatedstrings,terminatedbytwonullcharacters.(Pythonhandlesthisterminationautomatically.)
winreg.REG_NONE
Nodefinedvaluetype.
winreg.REG_QWORD
A64-bitnumber.
3.6新版功能.
winreg.REG_QWORD_LITTLE_ENDIAN
A64-bitnumberinlittle-endianformat.EquivalenttoREG_QWORD.
3.6新版功能.
winreg.REG_RESOURCE_LIST
Adevice-driverresourcelist.
winreg.REG_FULL_RESOURCE_DESCRIPTOR
Ahardwaresetting.
winreg.REG_RESOURCE_REQUIREMENTS_LIST
Ahardwareresourcelist.
winreg.REG_SZ
Anull-terminatedstring.
RegistryHandleObjects
ThisobjectwrapsaWindowsHKEYobject,automaticallyclosingitwhentheobjectisdestroyed.Toguaranteecleanup,youcancalleithertheClose()methodontheobject,ortheCloseKey()function.
Allregistryfunctionsinthismodulereturnoneoftheseobjects.
Allregistryfunctionsinthismodulewhichacceptahandleobjectalsoacceptaninteger,however,useofthehandleobjectisencouraged.
Handleobjectsprovidesemanticsfor__bool__()--thus
ifhandle:
print("Yes")
willprintYesifthehandleiscurrentlyvalid(hasnotbeenclosedordetached).
Theobjectalsosupportcomparisonsemantics,sohandleobjectswillcomparetrueiftheybothreferencethesameunderlyingWindowshandlevalue.
Handleobjectscanbeconvertedtoaninteger(e.g.,usingthebuilt-inint()function),inwhichcasetheunderlyingWindowshandlevalueisreturned.YoucanalsousetheDetach()methodtoreturntheintegerhandle,andalsodisconnecttheWindowshandlefromthehandleobject.
PyHKEY.Close()
ClosestheunderlyingWindowshandle.
Ifthehandleisalreadyclosed,noerrorisraised.
PyHKEY.Detach()
DetachestheWindowshandlefromthehandleobject.
Theresultisanintegerthatholdsthevalueofthehandlebeforeitisdetached.Ifthehandleisalreadydetachedorclosed,thiswillreturnzero.
Aftercallingthisfunction,thehandleiseffectivelyinvalidated,butthehandleisnotclosed.YouwouldcallthisfunctionwhenyouneedtheunderlyingWin32handletoexistbeyondthelifetimeofthehandleobject.
引发一个审计事件winreg.PyHKEY.Detach,附带参数key。
PyHKEY.__enter__()
PyHKEY.__exit__(*exc_info)
TheHKEYobjectimplements__enter__()and__exit__()andthussupportsthecontextprotocolforthewithstatement:
withOpenKey(HKEY_LOCAL_MACHINE,"foo")askey:
...#workwithkey
willautomaticallyclosekeywhencontrolleavesthewithblock.
更多内容请参考官方网站介绍。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。