Надо будет при запуске заполнять словарь существующими файлами. Пробуйте:
читать дальше »
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <file.au3>
#Include <Date.au3>
#Include <WinAPI.au3>
#Include <Crypt.au3>
AutoItSetOption("MustDeclareVars", 1)
Local $sFolder = "e:\Песочница\0190\0001"
Local $sComputer = "."
Local $oSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer($sComputer, "root\cimv2")
Local $oSWbemObjectEx
Local $oSWbemSink = ObjCreate("WbemScripting.SWbemSink")
Local $oSink = ObjEvent($oSWbemSink, "Sink_")
Local $aSplitPath, $sDrive, $sDir, $sFileName, $sExtension
Local $dtNow, $sNow
Local $sMD5
Local $oDictionary = ObjCreate("Scripting.Dictionary")
_PathSplit($sFolder & "\", $sDrive, $sDir, $sFileName, $sExtension)
$dtNow = _Date_Time_GetLocalTime()
$sNow = _Date_Time_SystemTimeToDateTimeStr($dtNow, 1)
For $oSWbemObjectEx In $oSWbemServicesEx.ExecQuery( _
"SELECT * FROM CIM_DataFile WHERE " & _
"Drive = '" & $sDrive & "' AND " & _
"Path = '" & StringReplace($sDir, "\", "\\") & "'" _
)
$sMD5 = _Crypt_HashFile($oSWbemObjectEx.Name, $CALG_MD5)
$oDictionary.Add($oSWbemObjectEx.Name, $sMD5)
ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" | | Present: [" & $oSWbemObjectEx.Name, 1) & "]" & @CRLF)
Next
$oSWbemServicesEx.ExecNotificationQueryAsync($oSWbemSink, _
"SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " & _
"TargetInstance ISA 'CIM_DataFile' AND " & _
"TargetInstance.Drive = '" & $sDrive & "' AND " & _
"TargetInstance.Path = '" & StringReplace($sDir, "\", "\\") & "'" _
)
_Crypt_Startup()
Do
Sleep(100)
Until(False)
_Crypt_Shutdown()
$oDictionary.RemoveAll
$oDictionary = 0
$oSink = 0
$oSWbemSink = 0
$oSWbemServicesEx = 0
$oSWbemLocator = 0
Exit(0)
Func Sink_OnObjectReady($oSWbemObjectEx, $oSWbemAsyncContext)
With $oSWbemObjectEx
$dtNow = _Date_Time_GetLocalTime()
$sNow = _Date_Time_SystemTimeToDateTimeStr($dtNow, 1)
Select
Case .Path_.Class = "__InstanceCreationEvent"
$sMD5 = _Crypt_HashFile(.TargetInstance.Name, $CALG_MD5)
$oDictionary.Add(.TargetInstance.Name, $sMD5)
ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" | | Create: [" & .TargetInstance.Name, 1) & "]" & @CRLF)
Case .Path_.Class = "__InstanceModificationEvent"
$sMD5 = _Crypt_HashFile(.TargetInstance.Name, $CALG_MD5)
If $oDictionary.Exists(.TargetInstance.Name) Then
If $oDictionary.Item(.TargetInstance.Name) <> $sMD5 Then
$oDictionary.Item(.TargetInstance.Name) = $sMD5
ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" | | Modify: [" & .TargetInstance.Name, 1) & "]" & @CRLF)
EndIf
Else
$oDictionary.Add(.TargetInstance.Name, $sMD5)
ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" | ± | Modify: [" & .TargetInstance.Name, 1) & "]" & @CRLF)
EndIf
Case .Path_.Class = "__InstanceDeletionEvent"
$oDictionary.Remove(.TargetInstance.Name)
ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" | | Delete: [" & .TargetInstance.Name, 1) & "]" & @CRLF)
Case Else
; Nothing to do
EndSelect
EndWith
EndFunc
|