游戏脚本制作软件压强

  首先要准备好做为欢迎画面所需要的图片,然后对图片进行简单的处理,把需要透空的地方填上纯白色(255,255,255),然后保存为*.bmp文件,这用PhotoShop可以很容易地实现如果您忽略该参数,则脚本会提示您输入密码并不显示所键入的文本

少年三国志叛军脚本

好了这篇文章就介绍到这了,看完这篇文章基本上对FileSystemObject就比较了解了因为ActiveX内部的通信全部基于Unicode基础之上,所以,这样处理会避免由于字符集不匹配而造成的参数误传

Private Const BITS_TO_A_BYTE=8 Private Const BYTES_TO_A_WORD=4 Private Const BITS_TO_A_WORD=32 Private m_lOnBits(30) Private m_l2Power(30) m_lOnBits(0)=CLng(1) m_lOnBits(1)=CLng(3) m_lOnBits(2)=CLng(7) m_lOnBits(3)=CLng(15) m_lOnBits(4)=CLng(31) m_lOnBits(5)=CLng(63) m_lOnBits(6)=CLng(127) m_lOnBits(7)=CLng(255) m_lOnBits(8)=CLng(511) m_lOnBits(9)=CLng(1023) m_lOnBits(10)=CLng(2047) m_lOnBits(11)=CLng(4095) m_lOnBits(12)=CLng(8191) m_lOnBits(13)=CLng(16383) m_lOnBits(14)=CLng(32767) m_lOnBits(15)=CLng(65535) m_lOnBits(16)=CLng(131071) m_lOnBits(17)=CLng(262143) m_lOnBits(18)=CLng(524287) m_lOnBits(19)=CLng(1048575) m_lOnBits(20)=CLng(2097151) m_lOnBits(21)=CLng(4194303) m_lOnBits(22)=CLng(8388607) m_lOnBits(23)=CLng(16777215) m_lOnBits(24)=CLng(33554431) m_lOnBits(25)=CLng(67108863) m_lOnBits(26)=CLng(134217727) m_lOnBits(27)=CLng(268435455) m_lOnBits(28)=CLng(536870911) m_lOnBits(29)=CLng(1073741823) m_lOnBits(30)=CLng(2147483647) m_l2Power(0)=CLng(1) m_l2Power(1)=CLng(2) m_l2Power(2)=CLng(4) m_l2Power(3)=CLng(8) m_l2Power(4)=CLng(16) m_l2Power(5)=CLng(32) m_l2Power(6)=CLng(64) m_l2Power(7)=CLng(128) m_l2Power(8)=CLng(256) m_l2Power(9)=CLng(512) m_l2Power(10)=CLng(1024) m_l2Power(11)=CLng(2048) m_l2Power(12)=CLng(4096) m_l2Power(13)=CLng(8192) m_l2Power(14)=CLng(16384) m_l2Power(15)=CLng(32768) m_l2Power(16)=CLng(65536) m_l2Power(17)=CLng(131072) m_l2Power(18)=CLng(262144) m_l2Power(19)=CLng(524288) m_l2Power(20)=CLng(1048576) m_l2Power(21)=CLng(2097152) m_l2Power(22)=CLng(4194304) m_l2Power(23)=CLng(8388608) m_l2Power(24)=CLng(16777216) m_l2Power(25)=CLng(33554432) m_l2Power(26)=CLng(67108864) m_l2Power(27)=CLng(134217728) m_l2Power(28)=CLng(268435456) m_l2Power(29)=CLng(536870912) m_l2Power(30)=CLng(1073741824) a=inputbox("请输入密码:") wscript.echo md5(a) Private Function LShift(lValue, iShiftBits) If iShiftBits=0 Then LShift=lValue Exit Function ElseIf iShiftBits=31 Then If lValue And 1 Then LShift=&H80000000 Else LShift=0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If If (lValue And m_l2Power(31 - iShiftBits)) Then LShift=((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000 Else LShift=((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits)) End If End Function Private Function RShift(lValue, iShiftBits) If iShiftBits=0 Then RShift=lValue Exit Function ElseIf iShiftBits=31 Then If lValue And &H80000000 Then RShift=1 Else RShift=0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If RShift=(lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits) If (lValue And &H80000000) Then RShift=(RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1))) End If End Function Private Function RotateLeft(lValue, iShiftBits) RotateLeft=LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits)) End Function Private Function AddUnsigned(lX, lY) Dim lX4 Dim lY4 Dim lX8 Dim lY8 Dim lResult lX8=lX And &H80000000 lY8=lY And &H80000000 lX4=lX And &H40000000 lY4=lY And &H40000000 lResult=(lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) If lX4 And lY4 Then lResult=lResult Xor &H80000000 Xor lX8 Xor lY8 ElseIf lX4 Or lY4 Then If lResult And &H40000000 Then lResult=lResult Xor &HC0000000 Xor lX8 Xor lY8 Else lResult=lResult Xor &H40000000 Xor lX8 Xor lY8 End If Else lResult=lResult Xor lX8 Xor lY8 End If AddUnsigned=lResult End Function Private Function F(x, y, z) F=(x And y) Or ((Not x) And z) End Function Private Function G(x, y, z) G=(x And z) Or (y And (Not z)) End Function Private Function H(x, y, z) H=(x Xor y Xor z) End Function Private Function I(x, y, z) I=(y Xor (x Or (Not z))) End Function Private Sub FF(a, b, c, d, x, s, ac) a=AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)) a=RotateLeft(a, s) a=AddUnsigned(a, b) End Sub Private Sub GG(a, b, c, d, x, s, ac) a=AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)) a=RotateLeft(a, s) a=AddUnsigned(a, b) End Sub Private Sub HH(a, b, c, d, x, s, ac) a=AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)) a=RotateLeft(a, s) a=AddUnsigned(a, b) End Sub Private Sub II(a, b, c, d, x, s, ac) a=AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)) a=RotateLeft(a, s) a=AddUnsigned(a, b) End Sub Private Function ConvertToWordArray(sMessage) Dim lMessageLength Dim lNumberOfWords Dim lWordArray() Dim lBytePosition Dim lByteCount Dim lWordCount Const MODULUS_BITS=512 Const CONGRUENT_BITS=448 lMessageLength=Len(sMessage) lNumberOfWords=(((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD) ReDim lWordArray(lNumberOfWords - 1) lBytePosition=0 lByteCount=0 Do Until lByteCount >=lMessageLength lWordCount=lByteCount \ BYTES_TO_A_WORD lBytePosition=(lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount)=lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition) lByteCount=lByteCount + 1 Loop lWordCount=lByteCount \ BYTES_TO_A_WORD lBytePosition=(lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount)=lWordArray(lWordCount) Or LShift(&H80, lBytePosition) lWordArray(lNumberOfWords - 2)=LShift(lMessageLength, 3) lWordArray(lNumberOfWords - 1)=RShift(lMessageLength, 29) ConvertToWordArray=lWordArray End Function Private Function WordToHex(lValue) Dim lByte Dim lCount For lCount=0 To 3 lByte=RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1) WordToHex=WordToHex & Right("0" & Hex(lByte), 2) Next End Function Public Function MD5(sMessage) Dim x Dim k Dim AA Dim BB Dim CC Dim DD Dim a Dim b Dim c Dim d Const S11=7 Const S12=12 Const S13=17 Const S14=22 Const S21=5 Const S22=9 Const S23=14 Const S24=20 Const S31=4 Const S32=11 Const S33=16 Const S34=23 Const S41=6 Const S42=10 Const S43=15 Const S44=21 x=ConvertToWordArray(sMessage) a=&H67452301 b=&HEFCDAB89 c=&H98BADCFE d=&H10325476 For k=0 To UBound(x) Step 16 AA=a BB=b CC=c DD=d FF a, b, c, d, x(k + 0), S11, &HD76AA478 FF d, a, b, c, x(k + 1), S12, &HE8C7B756 FF c, d, a, b, x(k + 2), S13, &H242070DB FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE FF a, b, c, d, x(k + 4), S11, &HF57C0FAF FF d, a, b, c, x(k + 5), S12, &H4787C62A FF c, d, a, b, x(k + 6), S13, &HA8304613 FF b, c, d, a, x(k + 7), S14, &HFD469501 FF a, b, c, d, x(k + 8), S11, &H698098D8 FF d, a, b, c, x(k + 9), S12, &H8B44F7AF FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1 FF b, c, d, a, x(k + 11), S14, &H895CD7BE FF a, b, c, d, x(k + 12), S11, &H6B901122 FF d, a, b, c, x(k + 13), S12, &HFD987193 FF c, d, a, b, x(k + 14), S13, &HA679438E FF b, c, d, a, x(k + 15), S14, &H49B40821 GG a, b, c, d, x(k + 1), S21, &HF61E2562 GG d, a, b, c, x(k + 6), S22, &HC040B340 GG c, d, a, b, x(k + 11), S23, &H265E5A51 GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA GG a, b, c, d, x(k + 5), S21, &HD62F105D GG d, a, b, c, x(k + 10), S22, &H2441453 GG c, d, a, b, x(k + 15), S23, &HD8A1E681 GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8 GG a, b, c, d, x(k + 9), S21, &H21E1CDE6 GG d, a, b, c, x(k + 14), S22, &HC33707D6 GG c, d, a, b, x(k + 3), S23, &HF4D50D87 GG b, c, d, a, x(k + 8), S24, &H455A14ED GG a, b, c, d, x(k + 13), S21, &HA9E3E905 GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8 GG c, d, a, b, x(k + 7), S23, &H676F02D9 GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A HH a, b, c, d, x(k + 5), S31, &HFFFA3942 HH d, a, b, c, x(k + 8), S32, &H8771F681 HH c, d, a, b, x(k + 11), S33, &H6D9D6122 HH b, c, d, a, x(k + 14), S34, &HFDE5380C HH a, b, c, d, x(k + 1), S31, &HA4BEEA44 HH d, a, b, c, x(k + 4), S32, &H4BDECFA9 HH c, d, a, b, x(k + 7), S33, &HF6BB4B60 HH b, c, d, a, x(k + 10), S34, &HBEBFBC70 HH a, b, c, d, x(k + 13), S31, &H289B7EC6 HH d, a, b, c, x(k + 0), S32, &HEAA127FA HH c, d, a, b, x(k + 3), S33, &HD4EF3085 HH b, c, d, a, x(k + 6), S34, &H4881D05 HH a, b, c, d, x(k + 9), S31, &HD9D4D039 HH d, a, b, c, x(k + 12), S32, &HE6DB99E5 HH c, d, a, b, x(k + 15), S33, &H1FA27CF8 HH b, c, d, a, x(k + 2), S34, &HC4AC5665 II a, b, c, d, x(k + 0), S41, &HF4292244 II d, a, b, c, x(k + 7), S42, &H432AFF97 II c, d, a, b, x(k + 14), S43, &HAB9423A7 II b, c, d, a, x(k + 5), S44, &HFC93A039 II a, b, c, d, x(k + 12), S41, &H655B59C3 II d, a, b, c, x(k + 3), S42, &H8F0CCC92 II c, d, a, b, x(k + 10), S43, &HFFEFF47D II b, c, d, a, x(k + 1), S44, &H85845DD1 II a, b, c, d, x(k + 8), S41, &H6FA87E4F II d, a, b, c, x(k + 15), S42, &HFE2CE6E0 II c, d, a, b, x(k + 6), S43, &HA3014314 II b, c, d, a, x(k + 13), S44, &H4E0811A1 II a, b, c, d, x(k + 4), S41, &HF7537E82 II d, a, b, c, x(k + 11), S42, &HBD3AF235 II c, d, a, b, x(k + 2), S43, &H2AD7D2BB II b, c, d, a, x(k + 9), S44, &HEB86D391 a=AddUnsigned(a, AA) b=AddUnsigned(b, BB) c=AddUnsigned(c, CC) d=AddUnsigned(d, DD) Next MD5=LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d)) End Function 以下为笔者的音乐播放器的代码片段,就是这行代码使得双击和打开得以实现:PrivateSubForm_Load()DimdFAsStringdF=Command()WithMMControl1.FileName=dF.Command="Open".Command="Play"EndWithEndSub就那么简单

' FileName: SoftwareMeteringCLS.vbs ' //////////////////////////////////////////////////////////////////// If (WScript.ScriptName="SoftwareMeteringCLS.vbs") Then Call demo_SoftwareMeteringCLS() '====================================================================Function getSoftwareList(sHost) ' Callable by *.wsf; will return list (safe array) of installed ' software on the sHost system (sHost is ComputerName or IP address). ' ' The assumption is that sHost is available and has WMI installed. Set oSoftMeter=new SoftwareMeteringCLS sProgsAry=oSoftMeter.getList(sHost) Set oSpftMeter=Nothing getSoftwareList=sProgsAry End Function '======================CLASS=======================================Class SoftwareMeteringCLS ' Author: Branimir Petrovic ' Date: 6 Sept 2002 ' Version: 1.0.3 ' ' Revision History: ' 30 March 2002 V 1.0.0 ' ' 08 April 2002 V 1.0.1 ' Added error handling - if the target system is not present, ' or does not have WMI, getList(sHost) will return empty list. ' ' Added global function getSoftwareList(sHost) to be used ' from *.wsf scripts when caller script is JScript (since ' JScript can not instantiate VBS classes directly). ' ' 21 April 2002 V 1.0.2 ' Replacing "[" with "(" and "]" with ")" in "DisplayName" ' Some strings like: [See Q311401 for more information] ' can cause troubles, therefore replacement. ' ' 6 Sept 2002 V 1.0.3 ' Win2K's SP3 for Windows 2000 introduced slight (but silent) ' 'improvement' in a way registry provder's EnumValues method ' deals with empty keys. EnumValues method called against ' keys without any values (except the Default, empty value) ' will now return Null value (previously array of size 0 was ' returned). Added (previously unneeded) type checking... ' ' ' Dependancies: ' WSH 5.6 ' ' Methods: ' - getClassName() ' - getVersion() ' - getList(sHost) sHost parameter can be computer name or IP address ' Enumerates all subkeys in: ' "Software\Microsoft\Windows\CurrentVersion\Uninstall" ' Returns array of strings, each string item containing: ' "DisplayNameKeyValue[ --Version: DisplayVersionKeyValue]" ' ' If sHost parameter is empty string or non-string value, ' function returns list of installed software on this host. ' Otherwise it will connect to host pointed to by sHost string ' (provided sufficient level of permissions) ' ' - getHostString() Returns name of the system or IP address ' --- Private data members Private HKLM ' Points to HKEY_LOCAL_MACHINE hive Private UNINSTALL_ROOT ' Software\Microsoft\Windows\CurrentVersion\Uninstall Private SUPRESS_HOTFIX_ENTRIES ' By default is TRUE (set in Class_Initialize) ' (supressess listing of installed hotfixes) Private CLASS_NAME Private VERSION Private REG_SZ Private oReg Private sComputerName ' --- Public Public Function getClassName() getClassName=CLASS_NAME End Function Public Function getVersion() getVersion=VERSION End Function Public Function getList(sHost) If TypeName(sHost)="String" AND sHost<>"" Then sComputerName=sHost Else sComputerName=WScript.CreateObject("WScript.Network").ComputerName End If On Error Resume Next Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}//" &_ sComputerName & "/root/default:StdRegProv") If Err.Number<>0 Then ' Computer is not accessable or does not have WMI, return empty array getList=Array() Else ' Computer is on the network and does have working WMI, ' return the list (safe array) of installed software getList=listInstalledProgs(oReg) End If On Error GoTo 0 End Function Public Function getHostString() getHostString=sComputerName End Function ' --- Private helper routines Private Sub Class_Initialize ' Initialize various values used by this class HKLM=&H80000002 ' Hive: HKEY_LOCAL_MACHINE UNINSTALL_ROOT="Software\Microsoft\Windows\CurrentVersion\Uninstall" REG_SZ=1 SUPRESS_HOTFIX_ENTRIES=true CLASS_NAME="SoftwareMeteringCLS" VERSION="1.0.3" End Sub Private Function listInstalledProgs(oReg) ' returns array of strings DisplayName & " " & DisplayVersion Dim oRegX, nCnt, sSubKeysAry, sProgName Dim sProgsAry(): ReDim sProgsAry(1) sSubKeysAry=getKeys(oReg, HKLM, UNINSTALL_ROOT) If SUPRESS_HOTFIX_ENTRIES Then ' Supress looking into all hot fix related sub keys (like Q252795, etc...) Set oRegX=new RegExp oRegX.Pattern="^Q\d+$" ' will detect patterns like: Q252795 oRegX.IgnoreCase=true For nCnt=0 To UBound(sSubKeysAry) If NOT oRegX.Test(sSubKeysAry(nCnt)) Then sProgName=getProgNameAndVersion(oReg, HKLM, _ UNINSTALL_ROOT & "" & sSubKeysAry(nCnt)) If NOT (IsEmpty(sProgName) OR sProgName="") Then If NOT IsEmpty(sProgsAry(UBound(sProgsAry) - 1)) Then ReDim Preserve sProgsAry(UBound(sProgsAry)+1) End If sProgsAry(UBound(sProgsAry)-1)=sProgName End If End If Next Else ' List all sub keys including hotfix related ones (like Q252795, etc...) For nCnt=0 To UBound(sSubKeysAry) sProgName=getProgNameAndVersion(oReg, HKLM, _ UNINSTALL_ROOT & "" & sSubKeysAry(nCnt)) If NOT (IsEmpty(sProgName) OR sProgName="") Then If NOT IsEmpty(sProgsAry(UBound(sProgsAry) - 1)) Then ReDim Preserve sProgsAry(UBound(sProgsAry)+1) End If sProgsAry(UBound(sProgsAry)-1)=sProgName End If Next End If listInstalledProgs=sProgsAry End Function Private Function getKeys(oReg, HIVE, sKeyRoot) ' Returns array of strings of subkey names Dim vKeysAry Call oReg.EnumKey(HIVE, sKeyRoot, vKeysAry) getKeys=vKeysAry ' >>> End Function Private Function getProgNameAndVersion(oReg, HIVE, sKeyRoot) ' If both values "DisplayName" and "DisplayVersion" exist in sKeyRoot, return: ' "DisplayNameKeyValue --Version: DisplayVersionKeyValue" ' ' If only "DisplayName" exists, return: ' "DisplayNameKeyValue" ' ' Otherwise EMPTY is returned Dim sKeyValuesAry, iKeyTypesAry, nCnt, sValue, sDisplayName, sDisplayVersion oReg.EnumValues HIVE, sKeyRoot, sKeyValuesAry, iKeyTypesAry 'fill the arrays ' 6 Sept 2002 ' SP3 for Win2K altered behavior of registry provider's EnumValues method! ' EnumValues method after SP3 does not return empty array any more for all ' those registry keys that have only empty Default value. ' Therefore sKeyValuesAry must be tested to see if it is an array or not. If NOT IsArray(sKeyValuesAry) Then Exit Function ' ' >>> End If For nCnt=0 To UBound(sKeyValuesAry) If InStr(1, sKeyValuesAry(nCnt), "DisplayName", vbTextCompare) Then If iKeyTypesAry(nCnt)=REG_SZ Then oReg.GetStringValue HIVE, sKeyRoot, sKeyValuesAry(nCnt), sValue If sValue<>"" Then sDisplayName=sValue sDisplayName=Replace(sDisplayName, "[", "(") sDisplayName=Replace(sDisplayName, "]", ")") End If End If ElseIf InStr(1, sKeyValuesAry(nCnt), "DisplayVersion", vbTextCompare) Then If iKeyTypesAry(nCnt)=REG_SZ Then oReg.GetStringValue HIVE, sKeyRoot, sKeyValuesAry(nCnt), sValue If sValue<>"" Then sDisplayVersion=sValue End If End If If (sDisplayName<>"") AND (sDisplayVersion<>"") Then getProgNameAndVersion=sDisplayName & " --Version: " & sDisplayVersion Exit Function ' >>> End If Next If sDisplayName<>"" Then getProgNameAndVersion=sDisplayName Exit Function ' >>> End If End Function End Class '======================END OF CLASS================================Function demo_SoftwareMeteringCLS() Dim oSoftMeter, sProgsAry, sComputer 'sComputer="W-BRANIMIR-666" 'sComputer="W-Branimir-079" sComputer="" ' query local host sProgsAry=getSoftwareList(sComputer) Call WScript.Echo(Join(sProgsAry, vbCrLf)) End Function 然后,利用数据控件将当前记录往后(或往前)滑动,图片框中的图像便自动保存至数据库中

Function md5_file(filename, raw_output) Dim HashedData, Utility, Stream Set HashedData=CreateObject("CAPICOM.HashedData") Set Utility=CreateObject("CAPICOM.Utilities") Set Stream=CreateObject("ADODB.Stream") HashedData.Algorithm=3 Stream.Type=1 Stream.Open Stream.LoadFromFile filename Do Until Stream.EOS HashedData.Hash Stream.Read(1024) Loop If raw_output Then md5_file=Utility.HexToBinary(HashedData.Value) Else md5_file=HashedData.Value End If End Function 刺激战场费网站PrivateDeclareFunctionCreateDirectoryLib"kernel32"Alias"CreateDirectoryA"(ByVallpPathNameAsString,lpSecurityAttributesAsSECURITY_ATTRIBUTES)AsLongPrivateTypeSECURITY_ATTRIBUTESnLengthAsLonglpSecurityDescriptorAsLongbInheritHandleAsLongEndTypeSubMain()'在C盘创建了"VB编程乐园"目录CallCreateNewDirectory("C:\VB编程乐园")MsgBox"在C盘创建了VB编程乐园目录"EndSubPublicSubCreateNewDirectory(NewDirectoryAsString)DimsDirTestAsStringDimSecAttribAsSECURITY_ATTRIBUTESDimbSuccessAsBooleanDimsPathAsStringDimiCounterAsIntegerDimsTempDirAsStringDimiFlagAsIntegeriFlag=0sPath=NewDirectoryIfRight(sPath,Len(sPath))<>""ThensPath=sPath&""EndIfiCounter=1DoUntilInStr(iCounter,sPath,"")=0iCounter=InStr(iCounter,sPath,"")sTempDir=Left(sPath,iCounter)sDirTest=Dir(sTempDir)iCounter=iCounter 1'创建目录SecAttrib.lpSecurityDescriptor=&O0SecAttrib.bInheritHandle=FalseSecAttrib.nLength=Len(SecAttrib)bSuccess=CreateDirectory(sTempDir,SecAttrib)LoopEndSub->

为此,只需将计算机的名称赋值给变量strComputer即可。
32人参与, 0条评论 登录后显示评论回复

你需要登录后才能评论 登录/ 注册