Check.bas
上传用户:albinfu
上传日期:2021-08-24
资源大小:71k
文件大小:5k
源码类别:

杀毒

开发平台:

Visual Basic

  1. Attribute VB_Name = "Check"
  2. Dim SF As String
  3. Function CheckFile() '====动态检测====
  4. Dim X As Long, TE As String * 255, FO As String, FK As String, AX, Res As String, BX, cx
  5. Dim i As Integer, Volume As String * 255, Vol As String, LAB As String, Find As Integer, FD As String
  6. Dim fso, FF, d, f, f1, A As Integer, FTemp(1 To 10) As String, e, FS(1 To 10) As String, FB As Integer, AllFile As String
  7. Dim Nu As Integer
  8. '====定义Ftemp10个元素表示最多可以储存10个病毒=======
  9. X = GetForegroundWindow()
  10. If X = Form1.hwnd Then Exit Function '===本身不作检测===
  11. If X = 0 Then Exit Function  '====如果找不到活动窗口则退出===
  12. Set fso = CreateObject("scripting.filesystemobject")
  13. Call GetWindowText(X, TE, X + 1)
  14. FO = Left(TE, InStr(TE, vbNullChar) - 1) '=====活动窗口标题====
  15. If FO = "" Then Exit Function '===找不到标题退出===
  16. If FO <> SF Then '====对相同焦点的窗口只执行一次===
  17. SF = FO
  18. If InStr(FO, " ") = 0 Then
  19. 'Form1.Label1.Caption = Now & " " & FK & " 活动窗口:" & FO
  20. Exit Function '====找不到空格退出===
  21. End If
  22. If InStr(FO, "(") = 0 Or InStr(FO, ")") = 0 Then
  23. 'Form1.Label1.Caption = Now & " " & FK & " 活动窗口:" & FO
  24. Exit Function '====找不到括号则退出====
  25. End If
  26. AX = Split(FO, " ", -1, 1)
  27. If UBound(AX) < 1 Then '===只限制一个要求===
  28. 'Form1.Label1.Caption = Now & " " & FK & " 活动窗口:" & FO
  29. Exit Function '====小于两个空格退出====
  30. End If
  31. BX = Split(AX(1), "(", -1, 1)
  32. If UBound(BX) = 0 Then Exit Function
  33. cx = Split(BX(1), ")", -1, 1)
  34. FK = cx(0) & "" '====磁盘名====
  35. Call GetVolumeInformation(FK, Volume, 255, 0&, 0&, 0&, 0&, 255)
  36. Vol = Left(Volume, InStr(Volume, vbNullChar) - 1)
  37. If Vol = "" Then
  38. If GetDriveType(FK) = 2 Then
  39. LAB = "可移动磁盘"
  40. ElseIf GetDriveType(FK) = 3 Then
  41. LAB = "本地磁盘"
  42. End If
  43. Else
  44. LAB = Vol
  45. End If
  46. Res = "": Find = 0: FF = 0 '====初始化清空计数===
  47. Set d = fso.getfolder(FK)
  48. Set f = d.Files
  49. For Each f1 In f
  50. On Error Resume Next '===防止突然删除了文件导致刷新不过来====
  51. If InStr(GetAutoRun(CStr(f1)), "H") <> 0 Then
  52. Find = Find + 1 '====发现文件的个数=====
  53. Res = Res & f1.Name & ". "
  54. FD = fso.getextensionname(f1)
  55. If LCase(FD) = "inf" Or LCase(FD) = "exe" Or LCase(FD) = "pif" Then
  56. FB = FB + 1 '======发现病毒的个数=====
  57. FTemp(FB) = f1.Name '====================存储文件名======
  58. If fso.folderexists(FK & "隔离文件") = False Then fso.createfolder (FK & "隔离文件")
  59. FS(FB) = TellFileType(GetAutoRun(FK & FTemp(FB)))
  60. Set e = fso.GetFile(f1)
  61. e.Attributes = e.Attributes - 2 '================去掉隐藏属性====
  62. If InStr(GetAutoRun(CStr(f1)), "R") <> 0 Then '====去掉只读属性===
  63. e.Attributes = e.Attributes - 1
  64. End If
  65. If InStr(GetAutoRun(CStr(f1)), "S") <> 0 Then '====去掉系统属性===
  66. e.Attributes = e.Attributes - 4
  67. End If
  68. CopyFile FK & FTemp(FB), FK & "隔离文件" & FTemp(FB), False
  69. DeleteFile FK & FTemp(FB)
  70. WriteLog Now & " 发现文件:" & FTemp(FB) & "," & FS(FB) & ",该文件已被清除。"
  71. Form1.Frame2.Caption = "操作 已检测到:" & RecordNumber & " 条信息。"
  72. End If
  73. End If
  74. Next
  75. If FB > 0 Then '====如果发现了病毒,等先清除了所有病毒后再显示对话框=====
  76. For i = 1 To 10
  77. If FTemp(i) <> "" Then
  78. Nu = Nu + 1
  79. AllFile = AllFile & Nu & "." & FTemp(i) & " " & FS(i) & "  "
  80. Else
  81. Exit For
  82. End If
  83. Next i
  84. Dim WT As Long
  85. WT = GetForegroundWindow
  86. SetWindowPos WT, 1, 0, 0, 0, 0, 3 '==这一步很重要,在前台显示消息===
  87. A = MsgBox("发现文件:" & AllFile & _
  88. "文件已被清除。" & _
  89. "副本已备份到:" & FK & "隔离文件 中。" & vbCrLf & vbCrLf & _
  90. "选择‘确定’继续,‘取消’恢复被删除的文件。", vbOKCancel + 48, _
  91. "发现隐藏文件  " & LAB & " " & FK)
  92. SetWindowPos WT, -2, 0, 0, 0, 0, 3 '==恢复正常===
  93. If A = vbCancel Then '===恢复文件并去掉隐藏属性=====
  94. If fso.folderexists(FK & "隔离文件") = False Then
  95. WriteLog Now & " 备份文件被删除,无法恢复所需文件!"
  96. Form1.Frame2.Caption = "操作 已检测到:" & RecordNumber & " 条信息。"
  97. MsgBox "备份文件夹被删除,无法恢复所需文件!", 0 + 48, "失败"
  98. Exit Function
  99. End If
  100. For i = 1 To 10
  101. If FTemp(i) = "" Then Exit For
  102. If fso.fileexists(FK & "隔离文件" & FTemp(i)) = False Then
  103. WriteLog Now & " 文件:" & FK & "隔离文件" & FTemp(i) & " 被删除,无法恢复所需文件!"
  104. Form1.Frame2.Caption = "操作 已检测到:" & RecordNumber & " 条信息。"
  105. MsgBox "文件:" & FK & "隔离文件" & FTemp(i) & " 被删除,无法恢复所需文件!", 0 + 48, "失败"
  106. End If
  107. Next i
  108. For i = 1 To 10
  109. If FTemp(i) = "" Then Exit For
  110. CopyFile FK & "隔离文件" & FTemp(i), FK & FTemp(i), False
  111. WriteLog Now & " 备份文件被还原,为防止误删文件,请去掉文件的隐藏属性。"
  112. Form1.Frame2.Caption = "操作 已检测到:" & RecordNumber & " 条信息。"
  113. Next i
  114. Find = 0
  115. Exit Function
  116. End If
  117. End If
  118. If Find <> 0 Then
  119. Form1.Frame1.Caption = "提示 检测到: " & Find & " 个文件。"
  120. If Find = 1 Then
  121. Form1.Label1.Caption = Now & " " & LAB & " " & FK & " 发现隐藏文件:" & Res
  122. Form1.Label1.ForeColor = vbBlue
  123. ElseIf Find > 1 Then
  124. Form1.Label1.Caption = LAB & " " & FK & " 发现隐藏文件:" & Res
  125. Form1.Label1.ForeColor = vbBlue
  126. End If
  127. Else
  128. Form1.Frame1.Caption = "提示 检测到: " & 0 & " 个文件。"
  129. Form1.Label1.Caption = Now & " " & LAB & "  " & FK & " ,没有发现隐藏文件。"
  130. Form1.Label1.ForeColor = vbBlack
  131. End If
  132. End If
  133. End Function