📄 registry.prg
字号:
* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* 文件名: REGISTRY.PRG
* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
LOCAL NHKEY , CSUBKEY , NRESULT
LOCAL HKEY , IVALUE , LPSZVALUE , LPCCHVALUE , LPDWTYPE , LPBDATA , LPCBDATA
LOCAL LPCSTR , LPSZVAL , NLEN , LPDWRESERVED
LOCAL LPSZVALUENAME , DWRESERVED , FDWTYPE
LOCAL ISUBKEY , LPSZNAME , CCHNAME
DECLARE INTEGER RegOpenKey IN Win32API INTEGER , STRING @ , INTEGER @
DECLARE INTEGER RegCreateKey IN Win32API INTEGER , STRING @ , INTEGER @
DECLARE INTEGER RegDeleteKey IN Win32API INTEGER , STRING @
DECLARE INTEGER RegDeleteValue IN Win32API INTEGER , STRING
DECLARE INTEGER RegCloseKey IN Win32API INTEGER
DECLARE INTEGER RegSetValueEx IN Win32API INTEGER , STRING , INTEGER , INTEGER , STRING , ;
INTEGER
DECLARE INTEGER RegQueryValueEx IN Win32API INTEGER , STRING , INTEGER , INTEGER @ , ;
STRING @ , INTEGER @
LOCAL NUSERKEY , NCURRENTKEY , NERRCODE , CLPSUBKEY
NUSERKEY = -2147483647
NCURRENTKEY = 0
CLPSUBKEY = 'SoftWare\Microsoft\Bbais' + CHR(0)
PUBLIC REGOK
REGOK = .F.
NERRCODE = REGOPENKEY(M.NUSERKEY,M.CLPSUBKEY,@NCURRENTKEY)
IF NERRCODE <> 0
NERRNUM = REGCREATEKEY(NUSERKEY,CLPSUBKEY,@NCURRENTKEY)
SEED = 73961
SECD = INT(SECONDS())
= RAND(-7846)
A = INT(8736 * RAND())
B = INT(970852 * RAND())
C = INT(69453 * RAND())
A = BITXOR(A,SEED)
B = BITXOR(B,SEED)
C = BITXOR(C,SEED)
CSERIAL = ALLTRIM(STR(A)) + '-' + ALLTRIM(STR(B)) + '-' + ALLTRIM(STR(C))
CLPVALUENAME1 = 'serial' + CHR(0)
CLPDATA1 = CSERIAL + CHR(0)
NCBDATA1 = LEN(CLPDATA1)
NERRNUM = REGSETVALUEEX(NCURRENTKEY,CLPVALUENAME1,0,1,@CLPDATA1,@NCBDATA1)
CLPVALUENAME2 = 'regcode' + CHR(0)
CLPDATA2 = '' + CHR(0)
NCBDATA2 = LEN(CLPDATA2)
NERRNUM = REGSETVALUEEX(NCURRENTKEY,CLPVALUENAME2,0,1,@CLPDATA2,@NCBDATA2)
CLPVALUENAME3 = 'seed' + CHR(0)
CLPDATA3 = ALLTRIM(STR(SECD)) + CHR(0)
NCBDATA3 = LEN(CLPDATA3)
NERRNUM = REGSETVALUEEX(NCURRENTKEY,CLPVALUENAME3,0,1,@CLPDATA3,@NCBDATA3)
CLPVALUENAME4 = 'Run_Num' + CHR(0)
CLPDATA4 = '1' + CHR(0)
NCBDATA4 = LEN(CLPDATA4)
NERRNUM = REGSETVALUEEX(NCURRENTKEY,CLPVALUENAME4,0,1,@CLPDATA4,@NCBDATA4)
ENDIF
CLPVALUENAME1 = 'serial' + CHR(0)
CLPVALUENAME2 = 'regcode' + CHR(0)
CLPVALUENAME3 = 'Run_Num' + CHR(0)
STORE SPACE(256) TO CLPDATA1 , CLPDATA2 , CLPDATA3
NCBDATA1 = LEN(CLPDATA1)
NCBDATA2 = LEN(CLPDATA2)
NCBDATA3 = LEN(CLPDATA3)
STORE 0 TO NLPTYPE1 , NLPTYPE2 , NLPTYPE3
NERRNUM = ;
REGQUERYVALUEEX(NCURRENTKEY,CLPVALUENAME1,0,@NLPTYPE1,@CLPDATA1,@NCBDATA1)
NERRNUM = ;
REGQUERYVALUEEX(NCURRENTKEY,CLPVALUENAME2,0,@NLPTYPE2,@CLPDATA2,@NCBDATA2)
NERRNUM = ;
REGQUERYVALUEEX(NCURRENTKEY,CLPVALUENAME3,0,@NLPTYPE3,@CLPDATA3,@NCBDATA3)
RUN_NUM = VAL(CLPDATA3)
IF RUN_NUM < 50000
RUN_NUM = RUN_NUM + 1
ENDIF
CLPVALUENAME4 = 'Run_Num' + CHR(0)
CLPDATA4 = ALLTRIM(STR(RUN_NUM)) + CHR(0)
NCBDATA4 = LEN(CLPDATA4)
NERRNUM = REGSETVALUEEX(NCURRENTKEY,CLPVALUENAME4,0,1,@CLPDATA4,@NCBDATA4)
CLPVALUENAME4 = 'path' + CHR(0)
CLPDATA4 = PATHNAME + CHR(0)
NCBDATA4 = LEN(CLPDATA4)
NERRNUM = REGSETVALUEEX(NCURRENTKEY,CLPVALUENAME4,0,1,@CLPDATA4,@NCBDATA4)
REGCLOSEKEY(NCURRENTKEY)
CSERIAL = SUBSTR(CLPDATA1,1,NCBDATA1 - 1)
CREGCODE = SUBSTR(CLPDATA2,1,NCBDATA2 - 1)
REGCODE1 = CALREG(CSERIAL)
STORE '' TO REG1 , REG2
FOR I = 1 TO LEN(REGCODE1)
REG1 = REG1 + CHR(ASC(SUBSTR(REGCODE1,I,1)) + 10)
ENDFOR
SET EXACT ON
IF REG1 <> CREGCODE
REGOK = .F.
ELSE
REGOK = .T.
ENDIF
SET EXACT OFF
CLEAR DLLS
RETURN
PROCEDURE calreg
LPARAMETER SERIAL
LOCAL N1 , N2 , STR1 , A , B , C , RA1 , RB1 , RC1
N1 = AT('-',SERIAL)
A = LEFT(SERIAL,N1 - 1)
STR1 = SUBSTR(SERIAL,N1 + 1)
N2 = AT('-',STR1)
B = LEFT(STR1,N2 - 1)
C = SUBSTR(STR1,N2 + 1)
RA1 = PASSWD(A)
RB1 = PASSWD(B)
RC1 = PASSWD(C)
RETURN RA1 + '-' + RB1 + '-' + RC1
ENDPROC
*------
PROCEDURE passwd
LPARAMETER STR
LOCAL STR1 , I , J
STORE '' TO STR1
FOR I = 1 TO LEN(STR)
J = MOD(I * 12,I + 15) + MOD(I * I,I + 8) + I * 3 + 1
STR1 = STR1 + CHR(ASC(SUBSTR(STR,I,1)) + J)
ENDFOR
RETURN STR1
ENDPROC
*------*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -