Написал скрипт, который:
1) Блокирует компьютер при запуске нежелательных приложений;
2) Блокирует клавиатуру и кнопки мыши при простое компьютера в течение определённого времени. Это нужно, чтобы наблюдать происходящее на экране, но чтобы никто не мог производить никаких действий на компьютере.
Функция _HotKeyAssign() взята отсюда: HotKey - Установка горячих клавиш
Функция _IdleWaitStart() взята отсюда: Можно ли отследить бездействие системы?
1) Блокирует компьютер при запуске нежелательных приложений;
2) Блокирует клавиатуру и кнопки мыши при простое компьютера в течение определённого времени. Это нужно, чтобы наблюдать происходящее на экране, но чтобы никто не мог производить никаких действий на компьютере.
Код:
#include <Misc.au3>
#Include <HotKey.au3>
#include <BlockInputEx.au3>
#NoTrayIcon
Global Const $sTitle = 'Locker'
_Singleton($sTitle, 0)
Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1+2)
Opt('TrayAutoPause', 0)
Opt('TrayIconDebug', 1)
Opt('WinTitleMatchMode', 2)
;HotKeySet('x', '_Exit')
; при нажатии на клавишу F9 открывает 'временное окно', в течение которого ($nTime) можно запустить 'нежелательное приложение'
; через время $nTime после закрытия этого приложения 'временное окно' закрывается
HotKeySet('{F9}', '_Disable')
; Правый Alt блокирует компьютер:
_HotKeyAssign(0x00A5, '_Lock', $HK_FLAG_NOREPEAT)
Global $bLock = True
Global $bScreen = False
Global $hTimer = TimerInit()
Global $hWnd
; Длительность временного окна:
Global $nTime = 30000
; Время простоя, после которого блокируются клавиатура и мышь
Global $nIdleTime = 120000
While True
If TimerDiff($hTimer) > $nTime Then
$bLock = True
EndIf
; Ели запускается нежелательное приложение, то компьютер блокируется
If WinExists("[TITLE:Диспетчер задач]") Then
If $bLock And Not WinExists("[TITLE:Screen; CLASS:AutoIt v3]") Then
_Warning()
Else
$hTimer = TimerInit()
EndIf
EndIf
; После простоя в течение времени $nIdleTime блокируется клавиатура и клавиши мыши
If Not WinExists("[TITLE:Screen; CLASS:AutoIt v3]") Then
If _IdleWaitStart() > $nIdleTime And $bScreen == False Then
_Screen()
EndIf
EndIf
If WinExists($hWnd) And Not WinActive($hWnd) Then
WinActivate($hWnd)
EndIf
Sleep(50)
WEnd
;===================================================================================================
;===================================================================================================
; Открытие 'временного окна'
Func _Disable()
$bLock = False
$bScreen = False
SplashOff()
_BlockInputEx(0)
$hTimer = TimerInit()
EndFunc
; Блокировка компьютера
Func _Lock()
run('rundll32.exe user32.dll,LockWorkStation')
EndFunc
; Блокировка клавиатуры и кнопок мыши
Func _Screen()
$bScreen = True
_BlockInputEx(1, '{F9}|{RALT}|{MMOVE}|{MWSCROLL}')
EndFunc
; Блокировка компьютера с выводом предупреждающего сообщения
Func _Warning()
$bLock = False
run('rundll32.exe user32.dll,LockWorkStation')
$hWnd = SplashTextOn("Screen", "Несанкционированный доступ", @DesktopWidth, @DesktopHeight, -1, -1, 33, "", 24)
WinSetTrans($hWnd, "", 20)
EndFunc
Func _Exit()
Exit
EndFunc
; Определение времени простоя
Func _IdleWaitStart()
Local $LastInputInfo = DllStructCreate("uint;dword")
DllStructSetData($LastInputInfo, 1, DllStructGetSize($LastInputInfo))
DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($LastInputInfo))
Local $iSave = DllStructGetData($LastInputInfo, 2)
DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($LastInputInfo))
Local $aRet = DllCall("kernel32.dll", "long", "GetTickCount")
Return $aRet[0] - DllStructGetData($LastInputInfo, 2)
EndFunc
Функция _HotKeyAssign() взята отсюда: HotKey - Установка горячих клавиш
Функция _IdleWaitStart() взята отсюда: Можно ли отследить бездействие системы?