Windows は個々のフォルダーにパスワード保護を提供しないため、「フォルダー ロック」のような多くのサード パーティ製ソフトウェアがその役割を果たします。この種のアプリケーションの背後にあるロジックを知りたいと思っていたところ、'lock-a-folder' のようなコードを見つけました。これは、私がよく知らない AutoIt スクリプトです。ただし、ここで使用されるロジックを知りたいだけです。
これらは、私が興味を持っているスクリプトの主な機能です:
Func Lock($slected)
Local $Temp,$TempFile
If @error or $slected = "" Then Return("Empty selection/Cancel Pressed")
If Not FileExists($slected) Then
MsgBox(0, $AppName, $slected & " " & Lang('doesntexist'), 0, $WIN1)
Return('doesntexist')
EndIf
Local $l0ckd = RegRead("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders")
_DebugOut('RegRead("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders") = ' & $l0ckd)
If Not StringInStr($l0ckd, $slected & ".{90F8C996-7C70-4331-9D70-FB357D559FD5}|") = 0 Then
MsgBox(0, $AppName, $slected & " " & Lang('alreadyinlist'), 0, $WIN1)
Return('alreadyinlist')
EndIf
If $CmdLine[0] = 0 Then
GUICtrlSetData($List1, "")
GUICtrlSetData($List1, Lang('plzwait') & "....")
GUISetState(@SW_DISABLE)
EndIf
_DebugOut($slected)
If $CmdLine[0] = 0 Then GUISetState(@SW_ENABLE)
If DirMove($slected, $slected & ".{90F8C996-7C70-4331-9D70-FB357D559FD5}") = 0 Then
FileSetAttrib($slected, "-RSH")
MsgBox(0, $AppName, $slected & " " & Lang('unable2lock'), 0, $WIN1)
If $CmdLine[0] = 0 Then Readfolders()
Return('unable2lock')
EndIf
$slected = $slected & ".{90F8C996-7C70-4331-9D70-FB357D559FD5}"
FileSetAttrib($slected, "+RSH")
$l0ckd &= $slected & "|"
_DebugOut("$l0ckd &= $slected| = " & $l0ckd)
$debug = RegWrite("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders", "REG_SZ", $l0ckd)
_DebugOut('RegWrite("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders", "REG_SZ", $l0ckd) = ' & $debug)
If $CmdLine[0] = 0 Then Readfolders()
Return("Done")
EndFunc ;==>Lock
Func UnLock($slected)
_DebugOut($slected)
If $slected = "" Or @error Then
MsgBox(0, $AppName, Lang('selectfirst'), 0, $WIN1)
Return("Empty selection/Cancel Pressed")
EndIf
If $CmdLine[0] = 0 Then
GUICtrlSetData($List1, "")
GUICtrlSetData($List1, Lang('plzwait') & "....")
GUISetState(@SW_DISABLE)
EndIf
Local $Temp = StringReplace($slected, ".{90F8C996-7C70-4331-9D70-FB357D559FD5}", "", 0, 2)
_DebugOut("$Temp = " & $Temp)
FileSetAttrib($slected, "-RSH")
Local $Temp1
$Temp1 = DirMove($slected, $Temp)
If $CmdLine[0] = 0 Then GUISetState(@SW_ENABLE)
If $Temp1 = 0 Then
$Temp1 = DirMove($slected, $Temp & ".recovered")
EndIf
If $Temp1 = 0 Then
MsgBox(0, $AppName, $slected & " " & Lang('unable2unlock'), 0, $WIN1)
If $CmdLine[0] = 0 Then Readfolders()
Return('unable2unlock')
EndIf
Local $l0ckd = RegRead("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders")
_DebugOut('RegRead("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders") = ' & $l0ckd)
$Temp = StringReplace($l0ckd, $slected & "|", "")
_DebugOut('StringReplace($l0ckd, $slected & "|", "")' & " = " & $Temp)
$debug = RegWrite("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders", "REG_SZ", $Temp)
_DebugOut('RegWrite("HKEY_CURRENT_USER\SOFTWARE\" & $AppName, "lockedfolders", "REG_SZ", $l0ckd) = ' & $debug)
If $CmdLine[0] = 0 Then Readfolders()
Return("Done")
EndFunc ;==>UnLock
誰かロジックを教えてください。