运行库VFP9R及VFP9RCHS改名
*!* 将运行库VFP9R及VFP9RCHS改名:
*!* 假如:
*!* VFP9R.DLL => AAAAA.DLL
*!* VFP9RCHS.DLL => BBBBBCHS.DLL
*!* 1:打开VFP9RCHS.DLL,将里面的VFP9R%s改成BBBBB%s;将VFP9RCHS.DLL改名为BBBBBCHS.DLL;
*!* 2:打开VFP9R.DLL,将里面的VFP9R.DLL改成AAAAA.DLL;将VFP9R.DLL改名为AAAAA.DLL;
*!* 3.打开该exe程序,将里面的VFP9R.DLL改成AAAAA.DLL
*!* 4.开启修改后的EXE运行,完!
*!* 最好不要变动字符长度,如果改变了字符的长度,请相应处理修改后的文件
*!* 把CHS也改掉的话,需要将VFP9R.DLL中的VFP9R%s和VFP9R???同时替换
*!* 同样的可以应对VFP9T.DLL
*!* 同样的方法可以修改掉里面的错误信息.如:
*!* ---------------------------
*!* Microsoft Visual FoxPro
*!* ---------------------------
*!* Visual FoxPro cannot start. Could not load resources.
*!* ---------------------------
*!* 确定
*!* ---------------------------
SET DEFAULT TO JUSTPATH(SYS(16,0))
SET SAFETY OFF
SET NOTIFY OFF
CLEAR
*!* PRG目录下请存放EXE文件/VFP9R.DLl/VP9RCHS.DLL
IF !DIRECTORY([BIN])
MD BIN
ENDIF
lcFile = [x5Kit.EXE]
****************************************
*!* EXE:
IF FILE()
COPY FILE (lcFile) TO ([BIN\] + lcFile)
DispelFile([BIN\] + lcFile)
*!* VFP9R.DLL
IF FILE([VFP9R.DLL])
COPY FILE ([VFP9R.DLL]) TO ([BIN\Iamx5.DLL])
DispelFile([BIN\Iamx5.DLL],.T.)
ENDIF
*!* VFP9RCHS.DLL
IF FILE([VFP9RCHS.DLL])
COPY FILE ([VFP9RCHS.DLL]) TO ([BIN\Iamx5Lib.DLL])
DispelFile([BIN\Iamx5Lib.DLL],.T.)
ENDIF
? [Done~~~~]
*!* COPY FILE (lcSaveName) TO ([\\192.168.0.109\hare$\Test] + lcSaveName)
****************************************
FUNCTION DispelFile
LPARAMETERS lcFile,llEraseMS
*!* VFP9R
lcStr = Chr0string([VFP9R]) && Get 2
lcNewStr = Chr0string([Iamx5])
UpdateFile(lcFile,lcStr,lcNewStr)
lcStr = [VFP9R] && Get 2
lcNewStr = [Iamx5]
UpdateFile(lcFile,lcStr,lcNewStr)
IF llEraseMS = .T.
*!* MicroSoft
lcStr = Chr0string([MicroSoft]) && Get 2
lcNewStr = Chr0string([Iamx5Soft])
UpdateFile(lcFile,lcStr,lcNewStr)
lcStr = [MicroSoft] && Get 2
lcNewStr = [Iamx5Soft]
UpdateFile(lcFile,lcStr,lcNewStr)
ENDIF
*!* Visual FoxPro
lcStr = Chr0string([Visual FOXPRO]) && 6 Times
lcNewStr = Chr0string([Dispel x5Libs],LEN(lcStr))
UpdateFile(lcFile,lcStr,lcNewStr)
lcStr = [Visual FOXPRO] && Get 6
lcNewStr = [Dispel x5Libs]
UpdateFile(lcFile,lcStr,lcNewStr)
*!* FoxPro
lcStr = Chr0string([FOXPRO]) && 6 Times
lcNewStr = Chr0string([x5Libs],LEN(lcStr))
UpdateFile(lcFile,lcStr,lcNewStr)
lcStr = [FOXPRO] && Get 6
lcNewStr = [x5Libs]
UpdateFile(lcFile,lcStr,lcNewStr)
ENDFUNC
****************************************
FUNCTION UpdateFile
LPARAMETERS lcFile,lcStr,lcNewStr
? [Searched : ] + lcFile
lnHandle = FOPEN(lcFile,2)
IF lnHandle < 0
? [Open Error]
RETURN
ENDIF
ON ERROR FCLOSE(lnHandle)
lnSeekSize = LEN(lcStr)
SET COMPATIBLE ON
lnFileSize = FSIZE(lcFile)
FOR i=1 TO lnFileSize
FSEEK(lnHandle,i,0)
lcGets = FREAD(lnHandle,lnSeekSize)
IF UPPER(LEFT(lcGets,lnSeekSize)) == UPPER(lcStr)
? [ ] + TRANSFORM(i,[@0]) + [: ]
FSeek(lnHandle,-lnSeekSize,1)
?? IIF(FWRITE(lnHandle,lcNewStr)>0,[Success],[Failure])
FFLUSH(lnHandle,.T.)
ENDIF
ENDFOR
?[------------------]
?
FCLOSE(lnHandle)
ENDFUNC
****************************************
FUNCTION Chr0string
LPARAMETERS lcString,lnReturnLen
IF VARTYPE(lnReturnLen) # [N]
lnReturnLen = 0
ENDIF
LOCAL lcNewString ,lnlen,i
lnLen = LEN(lcString)
lcNewString = []
FOR i = 1 TO lnLen
lcNewString = lcNewString + SUBSTR(lcString,i,1) + CHR(0)
ENDFOR
IF lnReturnLen > 0
lcNewString = PADR(lcNewString,lnReturnLen,CHR(0))
ENDIF
RETURN lcNewString
ENDFUNC