Malcev пишет:Вроде такой вариант проходит
Только если на винчере больше никто ничего не делает.
Malcev пишет:Во время записи в директорию, размер директории не изменяется, хоть сутки пиши.
Размер же файла в эксплорере определяется нулевым и только если нажимать на его свойства - видно, что размер изменяется.
Поэтому твой скрипт, показывает изменения в директории, только после остановки записи, так как после остановки записи и "создаётся" этот файл
А мне нужно чтобы скрипт проверял этот файл во время записи.
Вот в чём загвоздка
Ясно, значит программа пишет не закрывая хендл и это печально(для нас, не для программы). Тогда, если новый файл создаётся редко(раз в час, например ), то алгоритм такой:
Path := A_ScriptDir
FileName := GetLastModifiedFileName(Path)
hFile := CreateFile(FileName, 0, 7, 0, 3, 0x80, 0)
FileSize := MyGetFileSize(hFile)
NewFileSize := FileSize
NewFileName := ""
loop
{
Sleep 2000
NewFileSize:=MyGetFileSize(hFile)
if (NewFileSize = FileSize)
{
NewFileName := GetLastModifiedFileName(Path)
if(NewFileName=FileName)
{
SoundBeep 750, 500
}
else
{
FileName := NewFileName
CloseHandle(hFile)
hFile := CreateFile(FileName, 0, 7, 0, 3, 0x80, 0)
FileSize := MyGetFileSize(hFile)
NewFileSize := FileSize
}
}
else
{
FileSize := NewFileSize
}
}
return
CreateFile(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile)
{
return DllCall("CreateFile", "str", lpFileName, "uint", dwDesiredAccess, "uint", dwShareMode, "uint", lpSecurityAttributes, "uint", dwCreationDisposition, "uint", dwFlagsAndAttributes, "uint", hTemplateFile, "uint")
}
CloseHandle(Handle)
{
return DllCall("CloseHandle", "uint", Handle)
}
GetFileInformationByHandle(hFile, lpFileInformation)
{
return DllCall("GetFileInformationByHandle", "uint", hFile, "uint", lpFileInformation, "uint")
}
MyGetFileSize(hFile)
{
VarSetCapacity(FileInformation, 52)
GetFileInformationByHandle(hFile, &FileInformation)
ret := NumGet(&FileInformation, 36)
VarSetCapacity(FileInformation, 0)
return ret
}
GetLastModifiedFileName(Path)
{
FileTimeModified := 0
FileName := ""
Loop %Path%\*.*, , 1
{
if(A_LoopFileTimeModified>FileTimeModified)
{
FileTimeModified := A_LoopFileTimeModified
FileName := A_LoopFileLongPath
}
}
return FileName
}
Esc::ExitApp