Что нового

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

SECTOR

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

Yashied

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

kaster

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

SECTOR

Продвинутый
Сообщения
399
Репутация
59
kaster сказал(а):
если же, тебе просто нужно решение, не изобретая велосипед, то кури вот эту тему...

Я в английском дуб дубом...
Может кто подробнее объяснит?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Я как то давно писал почти утилиту для этого: 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
Репутация
660
OffTopic:
CreatoR
Намечается ли обновление программы ?
 

CreatoR

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

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

kaaamid

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

CreatoR

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

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

kaaamid

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

CreatoR

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

kaaamid

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

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
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,671
Репутация
2,481
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
 
Верх