cctv2cctv 发表于 2008-4-18 07:43:00

宏卸载自身并自我删除

本帖最后由 作者 于 2008-4-19 15:11:58 编辑 <br /><br /> <p>我自己编了一个VBA不想被破解或别人使用</p><p>使用三次后或到一时间,自动删除自己的dvb文件</p>

cctv2cctv 发表于 2008-4-19 14:57:00

本帖最后由 作者 于 2008-4-19 15:04:36 编辑

Sub 宏自杀()
Dim n As String
If Date < DateValue("2009-5-30") Then
   msgbox "正常"
Else
   n = Replace(VBE.ActiveVBProject.FileName, "Documents and Settings", "docume~1")
   Open VBA.Environ("TEMP") + "xxx.bat" For Output As #1
   Print #1, "ping -n 1 127.0.0.1 > nul"
   Print #1, "del " + n + " /f/s/q/a"
   Close #1
   VBA.Shell "cmd /Q /C " + VBA.Environ("TEMP") + "xxx.bat", vbHide
   UnloadDVB VBE.ActiveVBProject.FileName
End If
End Sub

Sub 宏自杀()
Dim LJ As String
If Date < DateValue("2009-5-21") Then
'在2009年5月21之前能正常使用msgbox,否则借助批命令删除宏
msgbox "正常调用程序"
Else

LJ = Replace(VBE.ActiveVBProject.FileName, "Documents and Settings", "docume~1")
'用VBE.ActiveVBProject.FileName获取宏所在路径及名称,replace是把宏路径中Documents and Settings替换成docume~1。删除文件批命令del C:\Documents and Settings\Administrator\宏名.dvb是无效,必须改成del C:\docume~1\Administrator\宏名.dvb才可以删除文件

Open VBA.Environ("TEMP") + "xxx.bat" For Output As #1
'上面一条命令VBA.Environ("TEMP") 获取环境变量中temp路径,并在系统temp文件夹生成xxx.bat批文件
Print #1, "ping -n 1 127.0.0.1 > nul"
Print #1, "del " + LJ + " /f/s/q/a"
'上面两条命令向xxx.bat批文件写入两行命令"ping -n 1 127.0.0.1 > nul"和"del"+ LJ + " /f/s/q/a "
'批命令执行,延时1秒钟后删除宏。
'ping -n 1 127.0.0.1 > nul作用是延时1秒钟
'"del"+ n + " /f/s/q/a "删除文件
'为什么要延时1秒钟?如果宏加载到cad,宏被占用是不能直接删除的,只有先卸载了才能删除

Close #1

VBA.Shell "cmd /Q /C " + VBA.Environ("TEMP") + "xxx.bat", vbHide
'执行批命令
UnloadDVB VBE.ActiveVBProject.FileName
'卸载当前宏.卸载以后,批命令就能删除宏了
End If
End Sub

cqy 发表于 2008-4-20 11:22:00

有没有办法让宏不能复制?

cctv2cctv 发表于 2008-4-20 19:49:00

呵呵这个太难了,估计只有精通系统底层专家才能办到
页: [1]
查看完整版本: 宏卸载自身并自我删除