VFP程序自毁代码
2007-11-24 14:16
有时候我们在编写程序的时候为了达到一定的目的需要程序本身进行自我销毁,但VFP是顺序执行代码的,用一般的删除文件的命令当然根本是不行的,但 我们知道DOS里的del 0%却可以自我销毁,这里我就用DOS的这个特殊点来示范一下VFP动态生成自我销毁BAT文件进行自毁的代码: 自毁1.prg
_screen.visible=.f.
_screen.top=-1024
k=MESSAGEBOX('本程序向你演示程序自毁的一个示例,希望能抛砖引玉.'+CHR(13)+CHR(13)+'你却是要进行程序自毁吗?','行者示例',33+256)
IF k=1
hh=CHR(13)+CHR(10)
f=SUBSTR(SYS(16),AT(':/',SYS(16))-1,LEN(SYS(16))-AT(':/',SYS(16))+2)
h=FCREATE('kill.bat')
[email=st='@echo]st=%27@echo[/email] off'+hh+'ntsd -c q -p '+ALLTRIM(STR(_VFP.ProcessID))+hh+"attrib -a -r -s -h "+'"&f"'+hh+'del '+'"&f"'+hh+'del %0'
=FWRITE(h,st)
=FCLOSE(h)
run kill.bat
ELSE
quit
endi
上面的代码是程序自动生成一个可以结束本身进程并删除自身的BAT文件,然后再运行它,当然在实际运用过程中还要对它进行改良!把上面的代码编译为EXE文件即可。
在自毁1.prg中我们用到了一个强制结束进程的命令和一个外部BAT文件,但是在实际应用中当我们进行程序自毁的时候是没有必要进行进程强制结束的,(既然要自毁了就正常QUIT程序就行了),而且调用BAT文件会出现一个讨厌的黑屏,所以我们最好采用VBS脚本来实现:
自毁2.prg
k=MESSAGEBOX('本程序向你演示程序自毁的一个示例,希望能抛砖引玉.'+CHR(13)+CHR(13)+'你却是要进行程序自毁吗?','行者示例',33+256)
if K=1
SET TEXTMERGE ON
TEXT TO killme NOSHOW
:On Error Resume Next
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile(WScript.ScriptName)
WScript.Sleep 500
do while fso.FileExists("<<SYS(16,1)>>")
fso.DeleteFile("<<SYS(16,1)>>")
loop
ENDTEXT
STRTOFILE(killme,'KILME.VBS')
owsh=createobject("wscript.shell")
owsh.run("Wscript.exe KILME.VBS")
*quit
ENDI
这样就能达到我们的要求了!
当然程序的自毁我们还可以用JS等脚本来实现,也可以利用WINDOWS的启动INI来实现,这里就不赘述了!
***************************************
vfp程序自毁代码
最新推荐文章于 2022-03-11 19:24:59 发布