AutoIt: v3.3.12.0
Версия: 1.0b
Категория: Элементы GUI
Описание: Пользователи.... пользователи никогда не меняются...
За многие годы работы ИТшником я точно знаю, что если дать возможность пользователю что-то сломать, он непременно ей воспользуется.
Остается только наблюдать и делать ставки, как быстро и как именно он сломает то или иное..
Единственный способ выжить, сохранить свой рассудок и при этом никого не убить -это относится к происходящему философски, ну и не помешает
отбирать права у пользователей, делать бесчисленное множество копий и бэкапов и все то, ради чего мне платят зарплату.
Тем не менее бывают случаи когда гуманные методы и имеющиеся решения на исходе, а фантазии у пользователей хоть отбавляй.
Здесь приходится включать думалку и искать кардинальное решение.
Проблема: Есть категория граждан, которые любят удалять свои файлы и папки с помощью комбинации клавиш Shift+Delete, а потом прибегать и просить все восстановить.
Решение: Скрыть кнопки на GUI, чтоб шаловливым ручонкам отважных юзерей нечего было нажимать.
Предлагаю Вашему вниманию скрипт блокировки кнопок окон (и не только кнопок).
Программа в самой начальной стадии разработки и здесь нет целого ряда функций, но уже есть чего показать.
Например, скрипт умеет блокировать кнопку "Да" при безвозвратном удалении файлов и папок (Shift+delete)
и блокирует кнопку восстановление инфы из теневых копий с общей папки в ту же самую папку (замечательная кнопка, способна похоронить всю работу целого отдела за несколько часов)
Код/Пример:
Файл: см вложение (исходник, ico, ini) (exe -не проходит по размеру :-( )
INI:
Снимок:
История версий:
Источник: autoit-script.ru
Автор(ы): [email protected]
Версия: 1.0b
Категория: Элементы GUI
Описание: Пользователи.... пользователи никогда не меняются...
За многие годы работы ИТшником я точно знаю, что если дать возможность пользователю что-то сломать, он непременно ей воспользуется.
Остается только наблюдать и делать ставки, как быстро и как именно он сломает то или иное..
Единственный способ выжить, сохранить свой рассудок и при этом никого не убить -это относится к происходящему философски, ну и не помешает
отбирать права у пользователей, делать бесчисленное множество копий и бэкапов и все то, ради чего мне платят зарплату.
Тем не менее бывают случаи когда гуманные методы и имеющиеся решения на исходе, а фантазии у пользователей хоть отбавляй.
Здесь приходится включать думалку и искать кардинальное решение.
Проблема: Есть категория граждан, которые любят удалять свои файлы и папки с помощью комбинации клавиш Shift+Delete, а потом прибегать и просить все восстановить.
Решение: Скрыть кнопки на GUI, чтоб шаловливым ручонкам отважных юзерей нечего было нажимать.
Предлагаю Вашему вниманию скрипт блокировки кнопок окон (и не только кнопок).
Программа в самой начальной стадии разработки и здесь нет целого ряда функций, но уже есть чего показать.
Например, скрипт умеет блокировать кнопку "Да" при безвозвратном удалении файлов и папок (Shift+delete)
и блокирует кнопку восстановление инфы из теневых копий с общей папки в ту же самую папку (замечательная кнопка, способна похоронить всю работу целого отдела за несколько часов)
Код/Пример:
Код:
#AutoIt3Wrapper_Icon=Donttouchthisbutton.ico
; Прячу иконку из трея
Opt("TrayIconHide", 1)
; Файл с настройками должен иметь имя такое же что и сам скрипт, отличаясь только расширением
Local $sIniFile = StringTrimRight(@ScriptName, 3) & "ini"
If Not FileExists($sIniFile) Then
MsgBox(16, "", "не нашел файл с настройками " & @LF & $sIniFile)
Exit
EndIf
; Читаю настройки по блокированию элементов и заношу в глобальный массив
Global $aBadCtrls = _ReadINI($sIniFile)
; Счетчик открытых окон, используется в _WinChk()
Global $nWin = 0
; Горячая клавиша выхода из программы, читаю из ini в разделе MAIN, ключ HotKeyExit
; Для отключения хоткея ключ HotKeyExit оставляем пустым (HotKeyExit=)
Local $sHotKey = IniRead($sIniFile, "Main", "HotKeyExit", "!{F12}")
If $sHotKey <> "" Then HotKeySet($sHotKey, "_Exit")
Global $fStarted = True ; отслеживание включено
Global $fUnhide = False ; показать ранее спрятанные контролы
$sHotKey = IniRead($sIniFile, "Main", "HotKeyStartStop", "")
If $sHotKey <> "" Then HotKeySet($sHotKey, "_StartStop")
; Проверку окон на предмет "BadCtrl-ов" решил делать как Alib функцию, ИМХО лучше чем связываться со sleep =)
; Время срабатывания функции вынес в ini файл, раздел "Main", ключ "Time"
; По умолчанию Time= 150 милисек.
Local $T= Number(IniRead($sIniFile, "Main", "Time", ""))
If $T = 0 Then $T=150
AdlibRegister("_WinChk",$T)
; Вечный кайф
While Sleep(2147483647)
WEnd
Func _ReadINI($sIniFile)
Local $i, $sSecName = "", $aSecName
; Читаю секции INI файла
Local $aSecNameAll = IniReadSectionNames($sIniFile)
; Игнорирую секцию Main
For $i = 1 To $aSecNameAll[0]
If $aSecNameAll[$i] = "Main" Then ContinueLoop
$sSecName &= $aSecNameAll[$i] & @LF
Next
$aSecName = StringSplit(StringTrimRight($sSecName, 1), @LF)
; заношу в массив данные по секциям
Local $aRes[1 + $aSecName[0]][4]
For $i = 1 To $aSecName[0]
$aRes[$i][0] = $aSecName[$i]
$aRes[$i][1] = IniRead($sIniFile, $aSecName[$i], "Title", "")
$aRes[$i][2] = IniRead($sIniFile, $aSecName[$i], "VisibleText", "")
$aRes[$i][3] = IniRead($sIniFile, $aSecName[$i], "Control_ID", 9990)
Next
$aRes[0][0] = $aSecName[0]
Return $aRes
EndFunc ;==>_ReadINI
Func _WinChk()
; Слежу за появлением новых окон
; Смотрю есть ли окна с "BadCtrl-ами"
; Если есть, "BadCtrl-ы" прячу
If Not $fStarted Then Return
Local $aList = WinList()
If $aList[0][0] > $nWin Then
; появилось новое окно
$nWin = $aList[0][0]
_ControlHide($aList)
ElseIf $aList[0][0] < $nWin Then
$nWin = $aList[0][0]
EndIf
EndFunc ;==>_WinChk
Func _ControlHide($aList, $sAct = "hide")
Local $i, $j
For $i = 1 To $nWin
For $j = 1 To $aBadCtrls[0][0]
If StringInStr($aList[$i][0], $aBadCtrls[$j][1]) Then
; есть совпадение в заголовке окна
If StringInStr(WinGetText($aList[$i][1]), $aBadCtrls[$j][2]) Then
; есть совпадение в тексте окна
Switch $sAct
Case "hide"
ControlDisable($aList[$i][1], WinGetText($aList[$i][1]), Number($aBadCtrls[$j][3])) ; отключаю
ControlHide($aList[$i][1], WinGetText($aList[$i][1]), Number($aBadCtrls[$j][3])) ; прячу
Case "show"
ControlEnable($aList[$i][1], WinGetText($aList[$i][1]), Number($aBadCtrls[$j][3])) ; включаю
ControlShow($aList[$i][1], WinGetText($aList[$i][1]), Number($aBadCtrls[$j][3])) ; отображаю
EndSwitch
EndIf
EndIf
Next
Next
EndFunc ;==>_ControlHide
Func _Exit()
$fStarted = False
_ControlHide(WinList(), "show")
MsgBox(0, @ScriptName, "bye..", 1)
Exit
EndFunc ;==>_Exit
Func _StartStop()
$fStarted = Not $fStarted
If $fStarted Then
$nWin = 0
Else
_ControlHide(WinList(), "show")
EndIf
EndFunc ;==>_StartStop
Файл: см вложение (исходник, ico, ini) (exe -не проходит по размеру :-( )
INI:
[Main]
Time =150
HotKeyExit =!{F12}
HotKeyStartStop = !{F1}
[Скрыть кнопку "Да" в диалоге Shift+Delete ]
Title =Удалить
VisibleText=Вы действительно хотите безвозвратно удалить
Control_ID=6
[Скрыть кнопку "Восстановить" при работе с теневыми копиями]
Title =Свойства:
VisibleText=Предыдущие версии можно получить из точек восстановления на сервере.
Control_ID=206
Time =150
HotKeyExit =!{F12}
HotKeyStartStop = !{F1}
[Скрыть кнопку "Да" в диалоге Shift+Delete ]
Title =Удалить
VisibleText=Вы действительно хотите безвозвратно удалить
Control_ID=6
[Скрыть кнопку "Восстановить" при работе с теневыми копиями]
Title =Свойства:
VisibleText=Предыдущие версии можно получить из точек восстановления на сервере.
Control_ID=206
Снимок:
История версий:
1.0b
+ Добавлена возможность приостанавливать работу программы по горячей клавише.
(Горячая клавиша прописывается в ini файле, разделе [Main], опция HotKeyStartStop)
* Исправлено несколько ошибок
+ Добавлена возможность приостанавливать работу программы по горячей клавише.
(Горячая клавиша прописывается в ini файле, разделе [Main], опция HotKeyStartStop)
* Исправлено несколько ошибок
Источник: autoit-script.ru
Автор(ы): [email protected]