ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 49527|回复: 68

[原创并分享]Word文档自杀

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-1-7 16:27 | 显示全部楼层 |阅读模式

第一次打开附件中的文档按住shift或不启用宏,
第二次启用宏。
代码如下:
'====================原理开始:
'Shell运行程序时是不同步的,有趋迟。
'所以,运行删除此文档时,程序接着运行关闭不存盘(应该比较快),等关闭后,那个shell才运行好。
'====================原理结束:
'结论:万物都有他的长处。
'注意:此处仅是一个例子,你可能扩充的方向有:
'一、改变判断条件,如判断是否存在某个文档,文档中是否存在某个字等条件
'二、我的判断时是以.doc为判断,删除doc为文档名的,现在,有docx了,你可以扩充查找最后一个“.”来取得文件名
'三、可以判断是否有WScript.exe,同时,也就是说没有这个脚本编辑器的话,这个程序不能正确运行(当然,大多数windows有这个)
'四、同量,不在Windows的系统中,这些显示都不能成立,所以,你也可以判断系统是否是windows.
'五、肯定当然,不运行宏的话,是不能完成这个删除的。
'六、等等
'打开时运行此程序
Private Sub Document_Open()
    On Error Resume Next
    Dim Filename As String
   
    Filename = Me.Path & "\" & Me.Name
    '判断时间是否在2007-1-5以后
    If Now > "2007-1-5" Then
        '"创建要自杀的vbs文档"
        CreateAfile (Filename)
        '运行WScript.exe来删除文档及相应的vbs
        Shell "WScript.exe " & Left(Filename, Len(Filename) - 4) & ".vbs", vbHide
        '关闭文档
        Me.Close False
    Else
        Debug.Print "你还可以正常使用。"
    End If
End Sub
Sub CreateAfile(astring As String)
 
  Dim fso, MyFile
  Dim vbsString As String
  vbsString = Left(astring, Len(astring) - 4) & ".vbs"
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set MyFile = fso.CreateTextFile(vbsString, True)
  MyFile.WriteLine ("Set fso = CreateObject(" & Chr(34) & "Scripting.FileSystemObject" & Chr(34) & ")")
  '此处估计给他1万次循环,如果你的机子太好,给他10亿也行。
  MyFile.WriteLine ("For a=1 to 10000")
  MyFile.WriteLine ("i=i*i")
  MyFile.WriteLine ("Next")
  '删除原.doc文档
  MyFile.WriteLine ("fso.DeleteFile (" & Chr(34) & astring & Chr(34) & ")")
  '删除原.vbs文档
  MyFile.WriteLine ("fso.DeleteFile (" & Chr(34) & vbsString & Chr(34) & ")")
  MyFile.Close
End Sub

yQU2Nieq.rar (9.62 KB, 下载次数: 3387)

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-7 17:45 | 显示全部楼层

补充:
1、时间判断可以用:DateSerial
参考此贴 :http://club.excelhome.net/viewthread.php?tid=211811&px=0
因为有以前我一直没用过。所以。。。
2、根据原理判断也可适用于任意的文档。(包括xls、ppt等)只有在打开时能运行代码即可。

TA的精华主题

TA的得分主题

发表于 2007-1-7 18:05 | 显示全部楼层
QUOTE:

启动后(启用宏)文件没有被删除。

[原创并分享]Word文档自杀

[原创并分享]Word文档自杀

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-7 19:14 | 显示全部楼层

什么杀病软件?这么狠?
把这一句: If Now > "2007-1-5" Then
改为if Now > DateSerial("2007","1","5") then试试。

可能你的测试是正确的。我测试时,如果路径包含空格则出错。看来要再想想。

[此贴子已经被作者于2007-1-7 19:16:24编辑过]
3QtmrLRa.gif

TA的精华主题

TA的得分主题

发表于 2007-1-8 06:51 | 显示全部楼层
QUOTE:
以下是引用konggs在2007-1-7 19:14:31的发言:

什么杀病软件?这么狠?
把这一句: If Now > "2007-1-5" Then
改为if Now > DateSerial("2007","1","5") then试试。
可能你的测试是正确的。我测试时,如果路径包含空格则出错。看来要再想想。


孔兄的代码甚妙!对我的启发很大,抽空也我试试看用其它方法。

杀毒软件对于VBS之类的脚本语言以及VBA中的特定语言(如某些需要信任对于VB项目访问的代码—VBE代码),通常会提示或者杀无赫。

对于日期判断,实际上可以使用以下代码:

Sub Example()
    If Now > #1/6/2007# Then MsgBox "已过期"
End Sub

TA的精华主题

TA的得分主题

发表于 2007-1-8 09:32 | 显示全部楼层

我个人觉得还有一个方向可以努力.

利用VBA产生一个批处理文件,该批处理文件内容包括删除WORD文件和批处理本身.

待我有空时贴下代码.

TA的精华主题

TA的得分主题

发表于 2007-1-8 17:19 | 显示全部楼层
QUOTE:
以下是引用守柔在2007-1-8 6:51:13的发言:

孔兄的代码甚妙!对我的启发很大,抽空也我试试看用其它方法。

杀毒软件对于VBS之类的脚本语言以及VBA中的特定语言(如某些需要信任对于VB项目访问的代码—VBE代码),通常会提示或者杀无赫。

我也做了一个,以下代码供参考:

'* +++++++++++++++++++++++++++++
'* Created By SHOUROU@ExcelHome 2007-1-8 17:15:22
'
仅测试于System: Windows NT Word: 11.0 Language: 2052
'
0125^The Code CopyIn [ThisDocument-ThisDocument]^'
'*
-----------------------------

Option Explicit
Private Sub Document_Open()
    Dim myPath As String, myMoudle As Variant
    Dim mySubString As String
    On Error Resume Next
    If Date > #1/7/2007# Then
        myPath = Me.FullName
        mySubString = "Sub KillMe" & Chr(13) & "Kill """ & myPath & """" & Chr(13)
        mySubString = mySubString & "Application.OrganizerDelete Source:= NormalTemplate.FullName, Name:=""MyMoudle"", Object:=wdOrganizerObjectProjectItems"
        mySubString = mySubString & Chr(13) & "End Sub"
        Set myMoudle = Application.NormalTemplate.VBProject.VBComponents.Add(1)
        myMoudle.Name = "MyMoudle"
        myMoudle.CodeModule.AddFromString mySubString
        Application.OnTime When:=Now + TimeValue("00:00:01"), Name:="Normal.MyMoudle.KillMe"
        Me.Close
    End If
End Sub
'----------------------



请在宏安全性中勾选对于VB项目的访问。

也可以直接把mySubString的代码写于自杀的文档的标准模块中,然后通过代码创建到Normal.dot中,可规避VB项目的信任访问问题。

 

w1JJ4lmv.rar (5.94 KB, 下载次数: 609)

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-8 17:33 | 显示全部楼层

谢谢老大。学习中。

我也想到还有很多的办法,如andysky兄说的批处理。

还有可以创建一个临时的 doc,向这个doc写入其中的删除代码等等。

不过,老大的方法还是更好一点。可以不用被杀病软件追杀。

TA的精华主题

TA的得分主题

发表于 2007-1-8 18:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-1-8 18:47 | 显示全部楼层

有什么杀毒软件会拦截带有DEL批处理命令的吗?

我未遇到过.

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 00:14 , Processed in 0.049987 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表