Что нового

[Окна / Контролы] Запрет открытия папок...

SECTOR

Продвинутый
Сообщения
390
Репутация
57
Туплю над прогой чтоб ставить пароль на папки...
Помогите начать плиз
:(
Я пробобал через вылов окна, но получилась просто огромная запутаная каша
из множества не нужных функций, заранее спасибо
:-[
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 702
Может я и не прав, но мне кажется тут лучше использовать сторонние утилиты.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
если хочешь сделать именно сам, то есть такая встроенная утилита в винде cacls.exe. вот его и мучай, для выставления прав для пользователя при вводе пароля например.
если же, тебе просто нужно решение, не изобретая велосипед, то кури вот эту тему
http://www.autoitscript.com/forum/index.php?showtopic=102468&st=0&p=727347&hl=folder%20lock&fromsearch=1&#entry727347
но лучше, пробуй сам, направить тут всегда смогут.
 
Автор
SECTOR

SECTOR

Продвинутый
Сообщения
390
Репутация
57
kaster сказал(а):
если же, тебе просто нужно решение, не изобретая велосипед, то кури вот эту тему...
Я в английском дуб дубом...
Может кто подробнее объяснит?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
Я как то давно писал почти утилиту для этого: http://forum.oszone.net/post-982514.html#post982514
Там далее есть более новая версия в архиве.
 

kaaamid

Чайник
Сообщения
15
Репутация
0
Доброго времени суток !
CreatoR, вот такой вопрос - понравилась Ваша утилита - нужная ! Так вот а реально сделать в ней чтоб она работала и после перезагрузки с заблокированной папкой или нет ??? ?


Код:
$sFile = FileSelectFolder("Select the folder", "")
If @error Then Exit

Global $sPass = InputBox("File security", "Please set a password", "", "*")
If @error Then Exit

Global $hFile = _CreateFile($sFile)
If $hFile = -1 Then Exit MsgBox(16, "Error", "Unable to open file")

HotKeySet("^d", "_Decrypt") ;Ctrl + d

While 1
    Sleep(100)
WEnd

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

    $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", $FILE_FLAG_BACKUP_SEMANTICS, _ ;Что бы получить дескриптор каталога, установите флажок FILE_FLAG_BACKUP_SEMANTICS
                                          "int", 0)
    Return $aRet[0]
EndFunc   ;==>_CreateFile

Func _Decrypt()
    Local $sCurPass = InputBox("File security", "Please enter a password", "", "*")
    If @error Then Return 0

    If $sCurPass == $sPass Then
        DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFile)
        MsgBox(64, "Success", "File decrypted")
        Exit
    Else
        MsgBox(16, "Error", "Access denied")
    EndIf
EndFunc   ;==>_Decrypt
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
657
OffTopic:
CreatoR
Намечается ли обновление программы ?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
kaaamid [?]
реально сделать в ней чтоб она работала и после перезагрузки с заблокированной папкой или нет
Возможно.
Нужно её ещё доработать...

* Чтобы сохраняла список блокированных файлов.
* Чтобы определяла попытку запуска файла более надёжнее, а не методом отлова системного окна.
* Чтобы можно было определить заблокирован ли уже файл или нет.
* Добавить настройки:
- Для режима блокировки (скрывать программу при закрытии или только при сворачивании).
- Мастер пароль на редактирование списка блокированных файлов.
 

kaaamid

Чайник
Сообщения
15
Репутация
0
CreatoR, было бы очень хорошо - сам я пока чайник - Спасибо !!!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
Всё вроде сделал (кроме 2-ого и 3-его пункта), пароли на каждый блокированный файл придётся наверное убрать, будет только мастер пароль на программу.

Позже возможно прикручу языковую поддержку (зачем?), и выложу то что получилось...
 

kaaamid

Чайник
Сообщения
15
Репутация
0
CreatoR, если я правильно понял Вы работаете над улучшенной версией своей программы (там где с окном выбора папок и файлов) - а нельзя переделать первую Вашу работу (код в первом моём сообщеннии) - такой вариант очень удобен (именно для папки ) - куча блокированных папок в компе не нужна а вот одна в самый раз - и работал скрипт чуть ли ни с флэшки (запустил и вытащил) - удобно !
Спасибо !!!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
kaaamid [?]
а нельзя переделать первую Вашу работу (код в первом моём сообщеннии)
Чтобы запускалась при старте Windows?
Можно просто скрипт добавить в автозагрузку, ну и сделать поправки в нём чтобы не показывалось окно выбора папки (проверять параметры ком. строки).
 

kaaamid

Чайник
Сообщения
15
Репутация
0
CreatoR [?]

Добавить в автозагрузку не проблема - объясню так : после перезагрузки скрипт отпускает папку - хотелось бы чтобы папка на которую был установлен пароль в прошлой сессии работы на компьютере после перезагрузки оставалась под защитой до тех пор пока горячими клавишами не снимешь с неё пароль .
PS: да конечно чтобы при входе в систему не выскакивало окно выбора папок - чтоб работал только один вариант скрипта - при разблокировке папки удалялся ключ реестра автозагрузки
Спасибо!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
kaaamid [?]
Код:
#NoTrayIcon

$sApp_RegKey = 'HKEY_CURRENT_USER\Software\FolderBlocker'
$sRun_RegKey = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run'

HotKeySet("^d", "_Decrypt") ;Ctrl + d

;DEBUG PURPOSE ONLY
;~ $CmdLineRaw &= ' /OnStartup'

If StringInStr($CmdLineRaw, '/OnStartup') Then
	$sFolder = RegRead($sApp_RegKey, 'Folder')
	$sPass = RegRead($sApp_RegKey, 'Pass')
	
	$hFile = _CreateFile($sFolder)
	If $hFile = -1 Then Exit MsgBox(16, "Error", "Unable to open file")
Else
	$sFolder = FileSelectFolder("Select the folder", "")
	If @error Then Exit

	$sPass = InputBox("File security", "Please set a password", "", "*")
	If @error Then Exit

	$hFile = _CreateFile($sFolder)
	If $hFile = -1 Then Exit MsgBox(16, "Error", "Unable to open file")

	RegWrite($sApp_RegKey, 'Folder', 'REG_SZ', $sFolder)
	RegWrite($sApp_RegKey, 'Pass', 'REG_SZ', $sPass)
	
	If @Compiled Then
		RegWrite($sRun_RegKey, 'FolderBlocker', 'REG_SZ', @AutoItExe & ' /OnStartup')
	Else
		RegWrite($sRun_RegKey, 'FolderBlocker', 'REG_SZ', @AutoItExe & ' "' & @ScriptFullPath & '" /OnStartup')
	EndIf
EndIf

While 1
    Sleep(100)
WEnd

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

    $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", $FILE_FLAG_BACKUP_SEMANTICS, "int", 0)
	
    Return $aRet[0]
EndFunc

Func _Decrypt()
    Local $sCurPass = InputBox("File security", "Please enter a password", "", "*")
    If @error Then Return 0
	
    If $sCurPass == $sPass Then
		DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFile)
       
		MsgBox(64, "Success", "File decrypted")
		
		RegDelete($sApp_RegKey)
		RegDelete($sRun_RegKey, 'FolderBlocker')
        
		Exit
    Else
        MsgBox(16, "Error", "Access denied")
    EndIf
EndFunc


Оно? :scratch:
 

kaaamid

Чайник
Сообщения
15
Репутация
0
CreatoR [?] Огромное спасибо - похоже то самое :ok: :IL_AutoIt_1:

Я конечно ещё не совсем всё осознал но папку держит после перезагрузки :ok:

==================================
Да, всё как я и хотел . Ещё раз спасибо ! :ok:
 

kaaamid

Чайник
Сообщения
15
Репутация
0
CreatoR [?] можно вопрос ? я в Ваш код (пост # 13) добавил в цикле скрытие из диспетчера задач - а вот прикрутить блокировку
Код:
ProcessWait("Unlocker.exe")
ProcessClose("Unlocker.exe")

у меня не получается - работает только одно - понимаю что это два цикла и работать будет только один пока не отработает своё - может я ошибаюсь - может можно это как то обойти чтоб работало или то или то в зависимости от того к чему обращаются ????????????
Заблокировать Unlocker.exe можно средствами реестра на время работы скрипта - но это не красиво и мало мальски способный пользователь может переименовать Unlocker.exe и запустить его

PS: почему столько запретов ???????? потому что без них утилита теряет свой смысл - в этом нет ничего дурного -это используется только в рамках программы и интересах пользователя заблокировавшего папку !
Хорошо бы чтоб запрет на Unlocker.exe срабатывал только в момент обращения к заблокированой папке - а в остальное время работал - это было бы вообще супер
Заранее Спасибо !
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
kaaamid
Я не совсем понял что требуется, можно скрипт полный увидеть?
 

kaaamid

Чайник
Сообщения
15
Репутация
0
код тот же самый - только добавил скрытие из диспетчера - хотелось бы ещё добавить определение на запуск Unlocker.exe и его блокирование ( это стандартные методы которыми можно раскрыть папку - поэтому их надо пресечь)

Код:
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

#Include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <ListViewConstants.au3>
Opt("WinWaitDelay", 0)


$sApp_RegKey = 'HKEY_CURRENT_USER\Software\FolderBlocker'
$sRun_RegKey = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run'

HotKeySet("^d", "_Decrypt") ;Ctrl + d



;DEBUG PURPOSE ONLY
;~ $CmdLineRaw &= ' /OnStartup'

If StringInStr($CmdLineRaw, '/OnStartup') Then
    $sFolder = RegRead($sApp_RegKey, 'Folder')
    $sPass = RegRead($sApp_RegKey, 'Pass')
    
    $hFile = _CreateFile($sFolder)
    If $hFile = -1 Then Exit MsgBox(16, "Error", "Unable to open file")
Else
    $sFolder = FileSelectFolder("Select the folder", "")
    If @error Then Exit

    $sPass = InputBox("File security", "Please set a password", "", "*")
    If @error Then Exit

    $hFile = _CreateFile($sFolder)
    If $hFile = -1 Then Exit MsgBox(16, "Error", "Unable to open file")

    RegWrite($sApp_RegKey, 'Folder', 'REG_SZ', $sFolder)
    RegWrite($sApp_RegKey, 'Pass', 'REG_SZ', $sPass)
    
    If @Compiled Then
        RegWrite($sRun_RegKey, 'FolderBlocker', 'REG_SZ', @AutoItExe & ' /OnStartup')
    Else
        RegWrite($sRun_RegKey, 'FolderBlocker', 'REG_SZ', @AutoItExe & ' "' & @ScriptFullPath & '" /OnStartup')
       
	   
	
	EndIf
EndIf


$sProcess = "CreatoR.exe"

While 1
    _WinAPI_CreateFile(@ScriptDir &'\CreatoR.exe', 2, 2, 0)
      
	
	WinWait("Диспетчер задач Windows")
    
    $iIndex = ControlListView("Диспетчер задач Windows", "", "SysListView321", "FindItem", $sProcess)
    
    If $iIndex = -1 Then
        Sleep(5)
    Else
        $hTaskMgr = WinGetHandle("Диспетчер задач Windows")
        $hListView = ControlGetHandle($hTaskMgr, "", "SysListView321")
        
        DllCall("User32.dll", "int", "SendMessage", "hwnd", $hTaskMgr, "int", $WM_COMMAND, "int", 40025, "int", 0)
        DllCall("User32.dll", "int", "SendMessage", "hwnd", $hListView, "int", $LVM_DELETEITEM, "int", $iIndex, "int", 0)
    EndIf
    
	
 Wend
 
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

    $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", $FILE_FLAG_BACKUP_SEMANTICS, "int", 0)
    
    Return $aRet[0]
EndFunc

Func _Decrypt()
    Local $sCurPass = InputBox("File security", "Please enter a password", "", "*")
    If @error Then Return 0
    
    If $sCurPass == $sPass Then
        DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFile)
       
        MsgBox(64, "Success", "File decrypted")
        
        RegDelete($sApp_RegKey)
        RegDelete($sRun_RegKey, 'FolderBlocker')
        
        Exit
    Else
        MsgBox(16, "Error", "Access denied")
    EndIf
EndFunc
 
Верх