Наткнулся на скрипт от CreatoR пытаюсь сделать сохрание пароля, выбранных файлов и папок в ini файл, чтоб при следующем запуске они отображались в [GUICtrlCreateListView], но пока без результатно. (Скрипт с Resources во вложениях)
Код:
;BlockIt Utility by (Mr)CreatoR (main idea by rasim) - First Alpha version.
;Tested on WinXP SP2 Russian localization
;Download URL: http://creator-lab.ucoz.ru/AutoIt/BlockIt_Utility.zip
#NoTrayIcon
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <Misc.au3>
#include <Resources\CustomBox.au3>
;
HotKeySet("^+b", "_Show_BlockIt_Window_Proc")
Opt("WinWaitDelay", 1)
Opt("WinTextMatchMode", 2)
Global Const $WM_DROPFILES = 0x0233
Global $aBlockedFiles_List[1][1]
Global $aDroppedFiles[1]
Global $iItem_Checked = False
Global $iShow_BlockMsg = False
Global $iTimer_Time = 100
Global $ahTimer = _TimerStart("_Check_BlockMsg_Proc", $iTimer_Time)
Global $hGUI = GUICreate("BlockIt Utility - by (Mr)CreatoR (main idea by rasim)", 600, 380, -1, -1, -1, $WS_EX_ACCEPTFILES)
Global $nSpaceCtrl_Dummy = GUICtrlCreateDummy()
Global $aAccelKeys[8][2] = [ _
["{Space}", $nSpaceCtrl_Dummy], _
["^{Space}", $nSpaceCtrl_Dummy], _
["!{Space}", $nSpaceCtrl_Dummy], _
["+{Space}", $nSpaceCtrl_Dummy], _
["^+{Space}", $nSpaceCtrl_Dummy], _
["^+!{Space}", $nSpaceCtrl_Dummy], _
["+!{Space}", $nSpaceCtrl_Dummy], _
["^!{Space}", $nSpaceCtrl_Dummy]]
GUICtrlCreateLabel("* To block Files/Folders, Drag && Drop them to the list bellow", 20, 10, 500, 17)
GUICtrlSetFont(-1, 9, 800)
GUICtrlSetColor(-1, 0xFF0000)
$Blocked_ListView = GUICtrlCreateListView("Blocked Items", 20, 30, 560, 300, _
BitOr($GUI_SS_DEFAULT_LISTVIEW, $LVS_NOCOLUMNHEADER), BitOR($LVS_EX_CHECKBOXES, $WS_EX_CLIENTEDGE, $WS_EX_DLGMODALFRAME))
GUICtrlSendMsg($Blocked_ListView, $LVM_SETCOLUMNWIDTH, 0, 550)
GUICtrlSetState($Blocked_ListView, $GUI_DROPACCEPTED)
$AddFiles_Button = GUICtrlCreateButton("Add Files...", 20, 340, 70, 20)
$AddFolder_Button = GUICtrlCreateButton("Add Folder...", 100, 340, 70, 20)
GUISetState(@SW_SHOW, $hGUI)
GUISetAccelerators($aAccelKeys, $hGUI)
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_Quit_Proc()
Case $GUI_EVENT_MINIMIZE
GUISetState(@SW_HIDE, $hGUI)
Case $GUI_EVENT_DROPPED
Local $aIconInfo, $LV_Item
For $i = 1 To $aDroppedFiles[0]
$LV_Item = GUICtrlCreateListViewItem($aDroppedFiles[$i], $Blocked_ListView)
$aIconInfo = _FileGetIcon($aDroppedFiles[$i])
If @error Or Not FileExists($aIconInfo[1]) Then
$aIconInfo[1] = "Shell32.dll"
$aIconInfo[2] = 3
EndIf
If $aIconInfo[2] > 0 Then
$aIconInfo[2] = -($aIconInfo[2]+1)
ElseIf $aIconInfo[2] < 0 Then
$aIconInfo[2] = -$aIconInfo[2]
EndIf
GUICtrlSetImage($LV_Item, $aIconInfo[1], $aIconInfo[2])
Next
GUICtrlSendMsg($Blocked_ListView, $LVM_SETCOLUMNWIDTH, 0, -1)
Case $AddFiles_Button
Local $sFile = FileOpenDialog("Please select File to Block", "", "All files (*.*)", 15, "", $hGUI)
If @error Then ContinueLoop
Local $LV_Item
Local $aFiles = StringSplit($sFile, "|")
If $aFiles[0] = 1 Then Dim $aFiles[3] = [2, @WorkingDir, StringRegExpReplace($sFile, "^.*\\", "")]
For $i = 2 To $aFiles[0]
$LV_Item = GUICtrlCreateListViewItem($aFiles[1] & "\" & $aFiles[$i], $Blocked_ListView)
$aIconInfo = _FileGetIcon($aFiles[1] & "\" & $aFiles[$i])
If @error Or Not FileExists($aIconInfo[1]) Then
$aIconInfo[1] = "Shell32.dll"
$aIconInfo[2] = 3
EndIf
If $aIconInfo[2] > 0 Then
$aIconInfo[2] = -($aIconInfo[2]+1)
ElseIf $aIconInfo[2] < 0 Then
$aIconInfo[2] = -$aIconInfo[2]
EndIf
GUICtrlSetImage($LV_Item, $aIconInfo[1], $aIconInfo[2])
Next
Case $AddFolder_Button
Local $sFolder = FileSelectFolder("Please select Folder to Block", "", 6, @WorkingDir, $hGUI)
If @error Then ContinueLoop
Local $LV_Item = GUICtrlCreateListViewItem($sFolder, $Blocked_ListView)
Local $aIconInfo = _FileGetIcon($sFolder)
If @error Or Not FileExists($aIconInfo[1]) Then
$aIconInfo[1] = "Shell32.dll"
$aIconInfo[2] = 3
EndIf
If $aIconInfo[2] > 0 Then
$aIconInfo[2] = -($aIconInfo[2]+1)
ElseIf $aIconInfo[2] < 0 Then
$aIconInfo[2] = -$aIconInfo[2]
EndIf
GUICtrlSetImage($LV_Item, $aIconInfo[1], $aIconInfo[2])
Case $nSpaceCtrl_Dummy
$iItem_Checked = String(_GUICtrlListView_GetSelectedIndices($Blocked_ListView))
$iIndex = Number($iItem_Checked)
$iItem_State = _GUICtrlListView_GetItemChecked($Blocked_ListView, $iIndex)
_GUICtrlListView_SetItemChecked($Blocked_ListView, $iIndex, Not $iItem_State)
EndSwitch
If IsString($iItem_Checked) Then
$iIndex = Number($iItem_Checked)
$iItem_Checked = False
$sItem_Data = _GUICtrlListView_GetItemText($Blocked_ListView, $iIndex)
$iItem_State = _GUICtrlListView_GetItemChecked($Blocked_ListView, $iIndex)
If $iItem_State = 1 Then
_BlockFile_Proc($sItem_Data)
Switch @error
Case 1, 2
_GUICtrlListView_SetItemChecked($Blocked_ListView, $iIndex, False)
If @error = 2 Then
$sErrorMsg = "Error - Unable to Block the File [Block Failed]:"
If _IsFolder($sItem_Data) Then $sErrorMsg = "Error - Unable to Block the Folder [Block Failed]:"
_CustomBox($sErrorMsg, $sItem_Data, 0, 0, $hGUI, 0x00000014)
EndIf
EndSwitch
Else
_UnBlockFile_Proc($sItem_Data)
If @error Then _GUICtrlListView_SetItemChecked($Blocked_ListView, $iIndex, True)
EndIf
EndIf
If IsString($iShow_BlockMsg) Then
$sFile_Path = $iShow_BlockMsg
$iShow_BlockMsg = False
$sErrorMsg = "Error - Unable to Open the File:"
If _IsFolder($sFile_Path) Then $sErrorMsg = "Error - Unable to Open the Folder:"
_CustomBox($sErrorMsg, _
StringFormat("This object (%s) is blocked by BlockIt Utility.", _
StringRegExpReplace($sFile_Path, "^.*\\", "")), 0, 1, $hGUI)
$ahTimer = _TimerStart("_Check_BlockMsg_Proc", $iTimer_Time)
EndIf
WEnd
Func _BlockFile_Proc($sFile, $iShowErrMsg=1)
Local $sPass = InputBox("File security", "Please set a password to Block current file: " & _
StringRegExpReplace($sFile, "^.*\\", ""), "", "*", 300, 200, -1, -1, 0, $hGUI)
If @error Or $sPass = "" Then Return SetError(1, 0, 0)
Local $hFile = _CreateFile($sFile)
If $hFile = -1 Then
If $iShowErrMsg Then
Local $sErrorMsg = "Error - Unable to Block the File:"
If _IsFolder($sFile) Then $sErrorMsg = "Error - Unable to Block the Folder:"
_CustomBox($sErrorMsg, $sFile, 0, 0, $hGUI, 0x00000014)
EndIf
Return SetError(2, 0, 0)
EndIf
For $i = 1 To $aBlockedFiles_List[0][0]
If $aBlockedFiles_List[$i][1] = $sFile Then
$aBlockedFiles_List[$i][0] = $hFile
$aBlockedFiles_List[$i][2] = $sPass
Return
EndIf
Next
$aBlockedFiles_List[0][0] += 1
ReDim $aBlockedFiles_List[$aBlockedFiles_List[0][0]+1][3]
$aBlockedFiles_List[$aBlockedFiles_List[0][0]][0] = $hFile
$aBlockedFiles_List[$aBlockedFiles_List[0][0]][1] = $sFile
$aBlockedFiles_List[$aBlockedFiles_List[0][0]][2] = $sPass
EndFunc
Func _UnBlockFile_Proc($sFile, $iShowErrMsg=1)
Local $sCurPass = InputBox("File security", "Please enter a password to UnBlock current file: " & _
StringRegExpReplace($sFile, "^.*\\", ""), "", "*", 300, 200, -1, -1, 0, $hGUI)
If @error Then Return SetError(2, 0, 0)
Local $sFile_ErrMsg = "", $aRet, $aTmpArr[1][1]
For $i = 1 To $aBlockedFiles_List[0][0]
If $aBlockedFiles_List[$i][1] = $sFile Then
If $aBlockedFiles_List[$i][2] == $sCurPass Then
$aRet = DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $aBlockedFiles_List[$i][0])
If @error Or Not $aRet[0] Then
$sFile_ErrMsg = "[CloseHandle Fail]: "
Else
ContinueLoop
EndIf
Else
$sFile_ErrMsg = "[Wrong Password]: "
EndIf
EndIf
$aTmpArr[0][0] += 1
ReDim $aTmpArr[$aTmpArr[0][0]+1][3]
$aTmpArr[$aTmpArr[0][0]][0] = $aBlockedFiles_List[$i][0]
$aTmpArr[$aTmpArr[0][0]][1] = $aBlockedFiles_List[$i][1]
$aTmpArr[$aTmpArr[0][0]][2] = $aBlockedFiles_List[$i][2]
Next
$aBlockedFiles_List = $aTmpArr
If $iShowErrMsg And $sFile_ErrMsg <> "" Then
Local $sErrorMsg = "Error - Unable to UnBlock the File "
If _IsFolder($sFile) Then $sErrorMsg = "Error - Unable to UnBlock the Folder "
_CustomBox($sErrorMsg & $sFile_ErrMsg, $sFile, 0, 0, $hGUI, 0x00000014)
Return SetError(1, 0, $sFile_ErrMsg)
Else
;MsgBox(64, "Success", "File UnBlocked.", 0, $hGUI)
EndIf
EndFunc
Func _Check_BlockMsg_Proc($hWnd, $Msg, $iIDTimer, $dwTime)
If IsArray($ahTimer) Then _TimerStop($ahTimer[0], $ahTimer[1])
If WinExists("[CLASS:#32770;REGEXPTITLE:.+]", "\") Then
Local $sWinText = WinGetText("[CLASS:#32770;REGEXPTITLE:.+]", "\")
If $sWinText <> "" Then
For $i = 1 To $aBlockedFiles_List[0][0]
If StringInStr($sWinText, $aBlockedFiles_List[$i][1]) Then
WinClose("[CLASS:#32770;REGEXPTITLE:.+]", $aBlockedFiles_List[$i][1])
$iShow_BlockMsg = $aBlockedFiles_List[$i][1]
Return
EndIf
Next
EndIf
EndIf
$ahTimer = _TimerStart("_Check_BlockMsg_Proc", $iTimer_Time)
EndFunc
Func _Show_BlockIt_Window_Proc()
If Not BitAND(WinGetState($hGUI), 2) Then
GUISetState(@SW_SHOW, $hGUI)
GUISetState(@SW_RESTORE, $hGUI)
EndIf
EndFunc
Func _CreateFile($sFile)
Local Const $GENERIC_READ = 0x80000000
Local Const $GENERIC_WRITE = 0x40000000
Local Const $FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
Local Const $OPEN_EXISTING = 3
Local $iFolderOpen = 0
If _IsFolder($sFile) Then $iFolderOpen = $FILE_FLAG_BACKUP_SEMANTICS
$sFile = "\\.\" & $sFile
Local $aRet = DllCall("kernel32.dll", "hwnd", "CreateFile", _
"str", $sFile, _
"int", BitOR($GENERIC_READ, $GENERIC_WRITE), _
"int", 0, _
"ptr", 0, _
"int", $OPEN_EXISTING, _
"int", $iFolderOpen, _
"int", 0)
Return $aRet[0]
EndFunc
Func _FileGetIcon($sFile)
Local $iOld_Opt_EES = Opt("ExpandEnvStrings", 1)
Local $sRegDefault = "", $sDefIcon = "", $sExt, $hSearch, $sIconFile, $nIcon=0
Local $aRet[3], $iError = 0
If _IsFolder($sFile) Then
$sRegDefault = RegRead("HKCR\Folder", "")
If $sRegDefault <> "" Then $sDefIcon = RegRead("HKCR\Folder\DefaultIcon", "")
Else
$sExt = StringRegExpReplace($sFile, '^.*\.', '.')
If $sExt = ".lnk" Then
Local $aLinkInfo = FileGetShortcut($sFile)
If Not @error Then
Opt("ExpandEnvStrings", $iOld_Opt_EES)
If Not FileExists($aLinkInfo[4]) Then
Local $a_LinkInfo = _FileGetIcon($aLinkInfo[0])
If Not @error Then
$aLinkInfo[4] = $a_LinkInfo[1]
$aLinkInfo[5] = $a_LinkInfo[2]
EndIf
EndIf
Dim $aRet[3] = [2, $aLinkInfo[4], $aLinkInfo[5]]
Return $aRet
EndIf
EndIf
If $sExt = $sFile Then
$hSearch = FileFindFirstFile($sFile & ".*")
$sExt = StringRegExpReplace(FileFindNextFile($hSearch), '^.*\.', '.')
$sFile &= $sExt
FileClose($hSearch)
EndIf
$sRegDefault = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & $sExt, "ProgID")
If $sRegDefault = "" Then $sRegDefault = RegRead("HKCR\" & $sExt, "")
If $sRegDefault <> "" Then $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\DefaultIcon", "")
EndIf
If $sDefIcon = "" Then
$sIconFile = "shell32.dll"
ElseIf $sDefIcon <> "%1" Then
If StringRegExpReplace($sFile, "^.*\\", "") = "shell32.dll" Then
$sIconFile = $sFile
$nIcon = 0
Else
Local $aDefIconSplit = StringSplit($sDefIcon, ",")
If IsArray($aDefIconSplit) Then
$sIconFile = $aDefIconSplit[1]
If $aDefIconSplit[0] > 1 Then $nIcon = $aDefIconSplit[2]
Else
$iError = 1
EndIf
EndIf
ElseIf $sDefIcon = "%1" Then
$sIconFile = $sFile
$nIcon = 0
EndIf
Opt("ExpandEnvStrings", $iOld_Opt_EES)
Dim $aRet[3] = [2, $sIconFile, $nIcon]
Return SetError($iError, 0, $aRet)
EndFunc
Func _IsFolder($sPath)
Return StringInStr(FileGetAttrib($sPath & "\"), "D")
EndFunc
Func _TimerStart($sFunction, $iTime=250)
Local $hCallBack = DllCallbackRegister($sFunction, "none", "hwnd;int;int;dword")
Local $aDll = DllCall("user32.dll", "int", "SetTimer", _
"hwnd", 0, _
"int", TimerInit(), _
"int", $iTime, _
"ptr", DllCallbackGetPtr($hCallBack))
Local $aRet[2] = [$hCallBack, $aDll[0]]
Return $aRet
EndFunc
Func _TimerStop(ByRef $hCallBack, ByRef $hTimer)
If $hCallBack > 0 Then DllCallBackFree($hCallBack)
Local $aRet = DllCall("User32.dll", "int", "KillTimer", "hwnd", 0, "int", $hTimer)
$hCallBack = 0
$hTimer = 0
Return $aRet[0]
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $Blocked_ListView
If Not IsHWnd($Blocked_ListView) Then $hWndListView = GUICtrlGetHandle($Blocked_ListView)
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_CLICK, $NM_DBLCLK, $NM_RCLICK, $LVN_ITEMCHANGED
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
Local $iIndex = DllStructGetData($tInfo, "Index")
If $iIndex <> -1 Then
Local $iX = DllStructGetData($tInfo, "X")
Local $iPart = 1
If _GUICtrlListView_GetView($Blocked_ListView) = 1 Then $iPart = 2 ;for large icons view
Local $aIconRect = _GUICtrlListView_GetItemRect($Blocked_ListView, $iIndex, $iPart)
If $iX < $aIconRect[0] And $iX >= 5 Then
$iItem_Checked = String($iIndex)
Return 0
EndIf
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
Local $nSize, $pFileName
Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
$aDroppedFiles = 0
Dim $aDroppedFiles[1]
For $i = 0 To $nAmt[0] - 1
$nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
$nSize = $nSize[0] + 1
$pFileName = DllStructCreate("char[" & $nSize & "]")
DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", _
DllStructGetPtr($pFileName), "int", $nSize)
$aDroppedFiles[0] += 1
ReDim $aDroppedFiles[$aDroppedFiles[0]+1]
$aDroppedFiles[$aDroppedFiles[0]] = DllStructGetData($pFileName, 1)
$pFileName = 0
Next
EndFunc
Func _Quit_Proc()
For $i = 1 To $aBlockedFiles_List[0][0]
DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $aBlockedFiles_List[$i][0])
Next
If IsArray($ahTimer) Then _TimerStop($ahTimer[0], $ahTimer[1])
Exit
EndFunc