- Сообщения
- 8,673
- Репутация
- 2,487
Используется вот такой скрипт (пример):
Мне нужно уметь определять когда была сделана попытка открыть заблокированный файл.
Соответственно вывести сообщение с указанием пути к этому файлу, а в идеале, запретить вывод системного сообщения о блокировке файла.
Код:
#include <WinAPIEx.au3>
$sFile = @DesktopDir & '\~Test'
DirCreate($sFile)
$hBlock = _BlockFile($sFile)
ShellExecute($sFile)
MsgBox(262144+64, @ScriptName, 'Trying to open file:' & @CRLF & @CRLF & $sFile & @CRLF & @CRLF & '...')
_UnBlockFile($hBlock)
DirRemove($sFile)
Func _BlockFile($sFile, $iShowErrMsg = 1)
If Not FileExists($sFile) Then
Return SetError(1, 0, -1)
EndIf
Local $hFile = _WinAPI_CreateFileEx($sFile, $OPEN_EXISTING, BitOR($GENERIC_READ, $GENERIC_WRITE), 0, _WinAPI_PathIsDirectory($sFile) ? $FILE_FLAG_BACKUP_SEMANTICS : 0)
If @error Or $hFile = -1 Then
If $iShowErrMsg Then
If _WinAPI_PathIsDirectory($sFile) Then
MsgBox(48, 'Error', 'Unable To Block The Folder')
Else
MsgBox(48, 'Error', 'Unable To Block The File')
EndIf
EndIf
Local $iFileInUse = 0
If _WinAPI_GetLastError() = 32 Then ; ERROR_SHARING_VIOLATION
$iFileInUse = 1
EndIf
Return SetError(1, $iFileInUse, $hFile)
EndIf
Return $hFile
EndFunc
Func _UnBlockFile($hBlock)
_WinAPI_CloseHandle($hBlock)
EndFunc
Мне нужно уметь определять когда была сделана попытка открыть заблокированный файл.
Соответственно вывести сообщение с указанием пути к этому файлу, а в идеале, запретить вывод системного сообщения о блокировке файла.