Trở về
Tham gia nhóm m Autoit đ đưc hưng dn và gii đáp trc tiếp : http://fb.com/groups/autoitscript
Tin tức công nghệ  -  Thủ thuật lập trình

Thursday, November 28, 2013

Sử dụng WinAPI để khóa tập tin và thư mục - Autoit


Toàn màn hìnhIn bài viết

Mã nguồn khá đơn giản và dễ hiểu, chỉ sử dụng các tập lệnh sẵn có của WinAPI.

Mã nguồn :

#include <WinAPIEx.au3>
#include <Misc.au3>
Func _BlockFile_Proc($sFile)
 Local $ErrorMessage = ""
 If Not FileExists($sFile) Then
  $ErrorMessage = _Iif(_WinAPI_PathIsDirectory($sFile), "Thư mục không tồn tại", "Tập tin không tồn tại")
  SetError(1)
  Return $ErrorMessage
 EndIf
 Local $hFile = _WinAPI_CreateFileEx($sFile, $OPEN_EXISTING, BitOR($GENERIC_READ, $GENERIC_WRITE), 0, _Iif(_WinAPI_PathIsDirectory($sFile), $FILE_FLAG_BACKUP_SEMANTICS, 0))
 If @error Or $hFile = -1 Then
  $ErrorMessage = "Không thể khóa tập tin này"
  If _WinAPI_PathIsDirectory($sFile) Then $ErrorMessage = "Không thể khóa thư mục này"
  If _WinAPI_GetLastError() = 32 Then $ErrorMessage &= @CRLF & "Nguyên nhân: tập tin hoặc thư mục đang được sử dụng"
  SetError(1)
  Return $ErrorMessage
 EndIf
 Return $hFile
EndFunc   ;==>BlockFile

Func _UnBlockFile_Proc($BlockHandle)
 If IsHWnd($BlockHandle) Then
  $iRet = _WinAPI_CloseHandle($BlockHandle)
 Else
  Return SetError(1, 0, -1)
 EndIf
EndFunc   ;==>_UnBlockFile_Proc

$BlockHandle = _BlockFile_Proc(@ScriptDir&"\test.txt")
$Error=@error
MsgBox(_Iif($Error,16,0),_Iif($Error,'Lỗi','Hoàn tất'),_Iif($Error,$BlockHandle,'Đã khóa tập tin này'))
If $Error then Exit
_UnBlockFile_Proc($BlockHandle)
MsgBox(0, 'Hoàn tất', 'Đã mở khóa tập tin này')


Sử dụng hai hàm trên, các bạn có thể ứng dụng để viết một chương trình để khóa tập tin và thư mục hoàn chỉnh.