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

杀毒

开发平台:

Visual Basic

  1. Attribute VB_Name = "Button"
  2. Option Explicit
  3. Public Const BF_BOTTOM = &H8
  4. Public Const BF_LEFT = &H1
  5. Public Const BF_RIGHT = &H4
  6. Public Const BF_TOP = &H2
  7. Public Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)
  8. Public Const BF_BOTTOMLEFT = (BF_BOTTOM Or BF_LEFT)
  9. Public Const BF_BOTTOMRIGHT = (BF_BOTTOM Or BF_RIGHT)
  10. Public Const BF_TOPRIGHT = (BF_TOP Or BF_RIGHT)
  11. Public Const BF_TOPLEFT = (BF_TOP Or BF_LEFT)
  12. Public Const BF_DIAGONAL = &H10
  13. Public Const BF_DIAGONAL_ENDBOTTOMLEFT = (BF_DIAGONAL Or BF_BOTTOM Or BF_LEFT)
  14. Public Const BF_DIAGONAL_ENDBOTTOMRIGHT = (BF_DIAGONAL Or BF_BOTTOM Or BF_RIGHT)
  15. Public Const BF_DIAGONAL_ENDTOPLEFT = (BF_DIAGONAL Or BF_TOP Or BF_LEFT)
  16. Public Const BF_DIAGONAL_ENDTOPRIGHT = (BF_DIAGONAL Or BF_TOP Or BF_RIGHT)
  17. Public Const BDR_RAISEDINNER = &H4
  18. Public Const BDR_RAISEDOUTER = &H1
  19. Public Const BDR_SUNKENINNER = &H8
  20. Public Const BDR_SUNKENOUTER = &H2
  21. Public Const EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER)
  22. Public Const EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER)
  23. Public Const EDGE_RAISED = (BDR_RAISEDOUTER Or BDR_RAISEDINNER)
  24. Public Const EDGE_SUNKEN = (BDR_SUNKENOUTER Or BDR_SUNKENINNER)
  25. Public Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
  26. Public Const EM_SETREADONLY = &HCF
  27. Type RECT
  28.         Left As Long
  29.         Top As Long
  30.         Right As Long
  31.         Bottom As Long
  32. End Type
  33. Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
  34. Declare Function DrawEdge Lib "user32" (ByVal hDC As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long
  35. Function ScanFactory() '====全盘扫描====
  36. Dim TE As String * 255, FO As String, FK As String, i As Integer, FB As Integer, AllFile As String
  37. Dim Volume As String * 255, Vol As String, LAB As String, FD As String, Nu As Integer
  38. Dim fso, d, f, f1, d1, m, A As Integer, FTemp(1 To 10) As String, e, FS(1 To 10) As String
  39. Dim m2, d2, PassMax As Integer, PassValue As Integer, BT As Integer
  40. '====定义Ftemp10个元素表示最多可以储存10个病毒=======
  41. Form1.PASS2.Value = 0
  42. Set fso = CreateObject("scripting.filesystemobject")
  43. Set m2 = fso.drives
  44. For Each d2 In m2 '=====先统计磁盘总数,计算进度条的最大值===
  45. On Error Resume Next
  46. If d2.drivetype = 2 Or d2.drivetype = 1 Then '===不检测CDROM及软盘或网络驱动器
  47. If LCase(d2.driveletter) <> "a" Then '可移动磁盘
  48. If d2.isready Then '===磁盘就绪===
  49. PassMax = PassMax + 1
  50. End If
  51. End If
  52. End If
  53. Next
  54. If PassMax = 0 Then
  55. MsgBox "没有发现磁盘分区,请检查系统配置及软件运行状况,与作者联系。", 0 + 64, "出错"
  56. Exit Function
  57. End If
  58. Form1.PASS2.Max = PassMax
  59. Form1.Timer1.Enabled = False
  60. Form1.BN(2).Enabled = False
  61. Form1.AutoPic '====刷新按钮======
  62. Form1.Label1.ForeColor = vbBlue
  63. Form1.Label2.Caption = "Find"
  64. Form1.Label1.Caption = Now & " 计时器暂停工作,正在执行系统扫描 ..."
  65. DoEvents
  66. Sleep 600
  67. Set m = fso.drives
  68. For Each d1 In m
  69. On Error Resume Next
  70. If d1.drivetype = 2 Or d1.drivetype = 1 Then '===不检测CDROM及软盘或网络驱动器
  71. If LCase(d1.driveletter) <> "a" Then '可移动磁盘
  72. If d1.isready Then '===磁盘就绪===
  73. PassValue = PassValue + 1 '====进度条状况===
  74. FK = d1.driveletter & ":" '====磁盘名====
  75. Call GetVolumeInformation(FK, Volume, 255, 0&, 0&, 0&, 0&, 255)
  76. Vol = Left(Volume, InStr(Volume, vbNullChar) - 1)
  77. If Vol = "" Then
  78. If GetDriveType(FK) = 2 Then
  79. LAB = "可移动磁盘"
  80. ElseIf GetDriveType(FK) = 3 Then
  81. LAB = "本地磁盘"
  82. End If
  83. Else
  84. LAB = Vol
  85. End If
  86. Form1.Label1.Caption = Now & " 正在检测磁盘分区 " & PassValue & " ,  " & LAB & " " & FK & " ..."
  87. DoEvents
  88. Sleep 200
  89. FB = 0 '====初始化清空计数===
  90. Set d = fso.getfolder(FK)
  91. Set f = d.Files
  92. For Each f1 In f
  93. On Error Resume Next '===防止突然删除了文件导致刷新不过来====
  94. If InStr(GetAutoRun(CStr(f1)), "H") <> 0 Then
  95. FD = fso.getextensionname(f1)
  96. If LCase(FD) = "inf" Or LCase(FD) = "exe" Or LCase(FD) = "pif" Then
  97. FB = FB + 1 '======发现病毒的个数=====
  98. BT = BT + 1 '=====总病毒个数======
  99. FTemp(FB) = f1.Name '====================存储文件名======
  100. If fso.folderexists(FK & "隔离文件") = False Then fso.createfolder (FK & "隔离文件")
  101. FS(FB) = TellFileType(GetAutoRun(FK & FTemp(FB)))
  102. Set e = fso.GetFile(f1)
  103. e.Attributes = e.Attributes - 2 '================去掉隐藏属性====
  104. If InStr(GetAutoRun(CStr(f1)), "R") <> 0 Then '====去掉只读属性====
  105. e.Attributes = e.Attributes - 1
  106. End If
  107. If InStr(GetAutoRun(CStr(f1)), "S") <> 0 Then '====去掉系统属性====
  108. e.Attributes = e.Attributes - 4
  109. End If
  110. CopyFile FK & FTemp(FB), FK & "隔离文件" & FTemp(FB), False
  111. DeleteFile FK & FTemp(FB)
  112. WriteLog Now & " 发现文件:" & FTemp(FB) & "," & FS(FB) & ",该文件已被清除。"
  113. Form1.Frame2.Caption = "操作 已检测到:" & RecordNumber & " 条信息。"
  114. End If
  115. End If
  116. Next
  117. If FB > 0 Then '====如果发现了病毒,等先清除了所有病毒后再显示对话框=====
  118. For i = 1 To 10
  119. If FTemp(i) <> "" Then
  120. Nu = Nu + 1
  121. AllFile = AllFile & Nu & "." & FTemp(i) & " " & FS(i) & "  "
  122. Else
  123. Exit For
  124. End If
  125. Next i
  126. Dim WT As Long
  127. WT = GetForegroundWindow
  128. SetWindowPos WT, 1, 0, 0, 0, 0, 3 '==这一步很重要,在前台显示消息===
  129. A = MsgBox("发现文件:" & AllFile & _
  130. "文件已被清除。" & _
  131. "副本已备份到:" & FK & "隔离文件 中。" & vbCrLf & vbCrLf & _
  132. "选择‘确定’继续,‘取消’恢复被删除的文件。", vbOKCancel + 48, _
  133. "发现隐藏文件  " & LAB & " " & FK)
  134. For i = 1 To 10
  135. FTemp(i) = ""
  136. Next i
  137. Nu = 0: AllFile = ""
  138. AllFile = AllFile & Nu & "." & FTemp(i) & " " & FS(i) & "  "
  139. SetWindowPos WT, -2, 0, 0, 0, 0, 3 '==恢复正常===
  140. If A = vbCancel Then '===恢复文件并去掉隐藏属性=====
  141. If fso.folderexists(FK & "隔离文件") = False Then
  142. WriteLog Now & " 备份文件被删除,无法恢复所需文件!"
  143. Form1.Frame2.Caption = "操作 已检测到:" & RecordNumber & " 条信息。"
  144. MsgBox "备份文件夹被删除,无法恢复所需文件!", 0 + 48, "失败"
  145. Exit Function
  146. End If
  147. For i = 1 To 10
  148. If FTemp(i) = "" Then Exit For
  149. If fso.fileexists(FK & "隔离文件" & FTemp(i)) = False Then
  150. WriteLog Now & " 文件:" & FK & "隔离文件" & FTemp(i) & " 被删除,无法恢复所需文件!"
  151. Form1.Frame2.Caption = "操作 已检测到:" & RecordNumber & " 条信息。"
  152. MsgBox "文件:" & FK & "隔离文件" & FTemp(i) & " 被删除,无法恢复所需文件!", 0 + 48, "失败"
  153. End If
  154. Next i
  155. For i = 1 To 10
  156. If FTemp(i) = "" Then Exit For
  157. CopyFile FK & "隔离文件" & FTemp(i), FK & FTemp(i), False
  158. WriteLog Now & " 备份文件被还原,为防止误删文件,请去掉文件的隐藏属性。"
  159. Form1.Frame2.Caption = "操作 已检测到:" & RecordNumber & " 条信息。"
  160. Next i
  161. Exit Function
  162. End If
  163. End If
  164. Form1.PASS2.Value = PassValue
  165. End If
  166. End If
  167. DoEvents
  168. End If
  169. Next
  170. Form1.Label1.ForeColor = vbBlue
  171. Form1.AutoPic
  172. Form1.BN(2).Enabled = True
  173. If BT > 0 Then
  174. Form1.Label1.Caption = Now & " 共检查:" & PassValue & " 块分区。共发现:" & BT & " 个病毒文件。"
  175. Else
  176. Form1.Label1.Caption = Now & " 共检查:" & PassValue & " 块分区。磁盘系统状态良好。"
  177. End If
  178. Sleep 500
  179. 'Form1.PASS2.Max = 400
  180. Form1.Timer1.Enabled = True
  181. End Function