2015-09-28
展开全部
解析如下:
Public Function KillMe() As Boolean
Dim mPath As String
On Error GoTo InIDE
如果发生错误,则跳转到inIDE。但由于inIDE后紧跟End Function,也就是说发生错误结束函 数。
mPath = CurrentProject.Name
将您正在操作的对象(即您的access数据库)的名称赋予变量mPath。实际上这句有些多余,因为下面几句随即将路径赋予了mPath。
If Right$(CurrentProject.Path, 1) = "\" Then
mPath = CurrentProject.Path
Else
mPath = CurrentProject.Path & "\"
End If
上面的假如语块,保证路径后面有反斜杠(即\)。
Open mPath & "Demon.bat" For Output As #1
以顺序输出(Output表示顺序输出,如果再有文件写入,将写在该文件内容之后)的方法将……\Demon.bat 文件输出到文件号为1的缓存区;如果不存在这个文件,则在这个路径下新建一个Demon.bat 文件,并且也输出到文件号为1的缓存区,当然此时文件内容为空。我感觉电脑里本身不存在……\Demon.bat这个批处理文件(后缀bat市批处理文件,它是一个可执行的文件),否则它直接给出绝对路径而不会用mPath变量了。
Print #1, ":Repeat" & vbCrLf & _
"del """ & mPath & CurrentProject.Name & "" & vbCrLf & "" _
; "if exist """ & mPath & CurrentProject.Name & """ goto Repeat " & vbCrLf & _
"del %0"
Print #1, 内容,就是将后面的内容写入文件号1的缓存区,实际上就是将内容写入Demon.bat这个文件。具体内容是:(vbCrLf表示回车换行)
【 :Repeat
del (路径)\您的access数据库
if exist"(路径)\您的access数据库" goto Repeat
del %0】
具体的批处理代码意思好久没用了有些模糊了,上面【】内基本意思是:删除你的access数据库,如果数据库一直存在没被删除,则返回:Repeat语句,继续删除,直至删除。
Close #1
关闭文件号1的缓存区,实际上就是保存了Demon.bat内容。
Shell mPath & "Demon.bat", vbHide
Shell表示 以异步方式(我们平时代码是一步一步执行的,这行代码没执行完是不会执行下一行代码的,但异步方式,你执行……\Demon.bat的代码,其后的代码继续执行,结合你前面的代码内容,就是一方面执行Demon.bat代码,同时继续执行Application.Quit acQuitSaveNone这句代码)执行……\Demon.bat文件,并且以隐藏状态方式执行(你看不到Demon.bat文件的DOS窗口)。现在我们就会明白为什么【】里要用到if exist……这句了?由于两段代码同时运行,你的access数据库有可能更迟运行完(就是还没卸载完),一个打开的程序(没卸载完就还处于打开状态)是不能被删除的,通过goto Repeat反复等待,一旦卸载完即删除。
InIDE:
End Function
纵观整个代码,总体的意思是:当你关闭你的access数据库时,整个数据库莫名其妙悄无声息的被删除了。你看看函数的名称Killme(即"删除本身"),Kill me杀死自己,体现了编程者的用意。再看看Demon.bat中的Demon的意思,妖魔、鬼怪、灵异,如果用户不知情,程序莫名其妙没了,还以为发生了灵异事件了。
它的意义是:
1、消极意义:把这些代码植入别人的程序,那就坑爹了。
2、积极意义:(1)如果某些文字、图片等等你只想让别人看一次,你可以植入这些代码,这样别人在access程序里看一次后,就不可能再看第二次了,电影里常常有这些画面。(2)可以在这个代码内加上触发内容,比如在你的例子中加入假如:
Private Sub Form_Unload(Cancel As Integer)
if date()=#2013-10-01# then
KillMe
end if
Application.Quit acQuitSaveNone
End Sub
这样,当系统日期到达2103年10月1日是就会发生自行删除事件了,假如你有一个花了大心思做的access软件,让别人试用,到10月1日前要他付费,如果不付费你不用对他的数据库操作,它就会自行删除了,保证了版权。
Public Function KillMe() As Boolean
Dim mPath As String
On Error GoTo InIDE
如果发生错误,则跳转到inIDE。但由于inIDE后紧跟End Function,也就是说发生错误结束函 数。
mPath = CurrentProject.Name
将您正在操作的对象(即您的access数据库)的名称赋予变量mPath。实际上这句有些多余,因为下面几句随即将路径赋予了mPath。
If Right$(CurrentProject.Path, 1) = "\" Then
mPath = CurrentProject.Path
Else
mPath = CurrentProject.Path & "\"
End If
上面的假如语块,保证路径后面有反斜杠(即\)。
Open mPath & "Demon.bat" For Output As #1
以顺序输出(Output表示顺序输出,如果再有文件写入,将写在该文件内容之后)的方法将……\Demon.bat 文件输出到文件号为1的缓存区;如果不存在这个文件,则在这个路径下新建一个Demon.bat 文件,并且也输出到文件号为1的缓存区,当然此时文件内容为空。我感觉电脑里本身不存在……\Demon.bat这个批处理文件(后缀bat市批处理文件,它是一个可执行的文件),否则它直接给出绝对路径而不会用mPath变量了。
Print #1, ":Repeat" & vbCrLf & _
"del """ & mPath & CurrentProject.Name & "" & vbCrLf & "" _
; "if exist """ & mPath & CurrentProject.Name & """ goto Repeat " & vbCrLf & _
"del %0"
Print #1, 内容,就是将后面的内容写入文件号1的缓存区,实际上就是将内容写入Demon.bat这个文件。具体内容是:(vbCrLf表示回车换行)
【 :Repeat
del (路径)\您的access数据库
if exist"(路径)\您的access数据库" goto Repeat
del %0】
具体的批处理代码意思好久没用了有些模糊了,上面【】内基本意思是:删除你的access数据库,如果数据库一直存在没被删除,则返回:Repeat语句,继续删除,直至删除。
Close #1
关闭文件号1的缓存区,实际上就是保存了Demon.bat内容。
Shell mPath & "Demon.bat", vbHide
Shell表示 以异步方式(我们平时代码是一步一步执行的,这行代码没执行完是不会执行下一行代码的,但异步方式,你执行……\Demon.bat的代码,其后的代码继续执行,结合你前面的代码内容,就是一方面执行Demon.bat代码,同时继续执行Application.Quit acQuitSaveNone这句代码)执行……\Demon.bat文件,并且以隐藏状态方式执行(你看不到Demon.bat文件的DOS窗口)。现在我们就会明白为什么【】里要用到if exist……这句了?由于两段代码同时运行,你的access数据库有可能更迟运行完(就是还没卸载完),一个打开的程序(没卸载完就还处于打开状态)是不能被删除的,通过goto Repeat反复等待,一旦卸载完即删除。
InIDE:
End Function
纵观整个代码,总体的意思是:当你关闭你的access数据库时,整个数据库莫名其妙悄无声息的被删除了。你看看函数的名称Killme(即"删除本身"),Kill me杀死自己,体现了编程者的用意。再看看Demon.bat中的Demon的意思,妖魔、鬼怪、灵异,如果用户不知情,程序莫名其妙没了,还以为发生了灵异事件了。
它的意义是:
1、消极意义:把这些代码植入别人的程序,那就坑爹了。
2、积极意义:(1)如果某些文字、图片等等你只想让别人看一次,你可以植入这些代码,这样别人在access程序里看一次后,就不可能再看第二次了,电影里常常有这些画面。(2)可以在这个代码内加上触发内容,比如在你的例子中加入假如:
Private Sub Form_Unload(Cancel As Integer)
if date()=#2013-10-01# then
KillMe
end if
Application.Quit acQuitSaveNone
End Sub
这样,当系统日期到达2103年10月1日是就会发生自行删除事件了,假如你有一个花了大心思做的access软件,让别人试用,到10月1日前要他付费,如果不付费你不用对他的数据库操作,它就会自行删除了,保证了版权。
追问
我想问在ACCess中数据打开这个动作对应的触发事件,不过你的代码有意思我看看,
sub 触发打开事件()
if date()=#20133 then
这里面写你的kill函数不就更吊了
end sub
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询