Что нового

Блокировка мыши и клавиатуры во время выполнения скрипта

vld-k

Новичок
Сообщения
39
Репутация
0
Добрый день.
Пожалуйста, помогите разобраться, как можно выполнить приведенный ниже скрипт, чтоб при этом пользователь не мог прервать, изменить фокус окна или как-либо повлиять на выполнение удаления программ.
Во время удаления трех программ, на рабочем столе появляются окна "cmd", окна программы, скрипт воздействует на кнопки, выполняя нажатия, все это введет в ступор пользователя.
Хочу чтоб во время выполнения, исключить возможность пользователя воздействовать на процесс, как минимум, выключить (строго на время выполнения скрипта) мышь, как максимум, сделать выполнение процедуры абсолютно незаметным.

Код:
RunWait (@ComSpec & ' /C Net Stop "LSNServer"')
Sleep (1000)
RunWait (@ComSpec & ' /C Net Stop "SysLogger"')
Sleep (1000)
RunWait (@ComSpec & ' /C Net Stop "CommServer"')
Sleep (1000)
RunWait (@ProgramFilesDir & '\nct\LSN\uninst.exe /SQ')
WinWaitActive ('Удаление  Network Server', '', '')
ControlClick ('Удаление  Network Server', '', 'Button1')
Sleep (1000)
WinWaitActive ('Удаление  Network Server', '', '')
ControlClick ('Удаление  Network Server', '', 'Button2')
Sleep (1000)
RunWait (@ProgramFilesDir & '\nct\SysLogger\uninst.exe /SQ')
WinWaitActive ('Удаление SysLogger', '', '')
ControlClick ('Удаление SysLogger', '', 'Button1')
Sleep (1000)
WinWaitActive ('Удаление SysLogger', '', '')
ControlClick ('Удаление SysLogger', '', 'Button2')
Sleep (1000)
RunWait (@ProgramFilesDir & '\nct\TOMAS\uninst.exe /SQ')
WinWaitActive ('Удаление TOMAS', '', '')
ControlClick ('Удаление TOMAS', '', 'Button1')
Sleep (1000)
WinWaitActive ('Удаление TOMAS', '')
ControlClick ('Удаление TOMAS', '', 'Button2')
Sleep (2000)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
vld-k,
Код:
BlockInput()
 
Автор
V

vld-k

Новичок
Сообщения
39
Репутация
0
madmasles сказал(а):
Отлично, спасибо. То что нужно.
Только возник еще вопрос, можно ли установить таймаут этой блокировки? в случае если срипт отработает не корректно, и не выполнить отключение блокировки?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
Func _OnExit()
	BlockInput(0)
EndFunc
OnAutoItExitRegister("_OnExit")
 

be4hoctb

Новичок
Сообщения
38
Репутация
0
А можно ли назначить горячую клавишу для отключения BlockInput ?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Она уже назначена в системе :smile:
Ctrl-Alt-Del
 

be4hoctb

Новичок
Сообщения
38
Репутация
0
Так открывается меню виндовс, а хотелось бы просто остановка скрипта
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
be4hoctb [?]
А можно ли назначить горячую клавишу для отключения BlockInput ?

В шапку скрипта:
Код:
HotKeySet( "{F5}", "__Unblock" )

Func __Unblock()
    BlockInput(0)
    Exit ; << Если требуется
EndFunc
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
firex, а вы сами проверяли этот код?
А то у меня например подобное не срабатывает
Код:
HotKeySet( "{F5}", "__Unblock" )

BlockInput(1)

While 1
	Sleep(200)
WEnd

Func __Unblock()
    BlockInput(0)
    Exit ; << Если требуется
EndFunc
 

be4hoctb

Новичок
Сообщения
38
Репутация
0
Пробовал назначать горячую клавишу на BlockInput(0) - не срабатывает ибо кнопки заблокированны
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
edyapd
Действительно, я как то поверхностно ответил даже не вдумываясь.

Можно использовать функцию _BlockInputEx; Заблокировать все кнопки за исключением нужной для отключения.
http://autoit-script.ru/index.php?topic=162.0
 

be4hoctb

Новичок
Сообщения
38
Репутация
0
у меня что-то не получается, либо блокирует все и функция не выполняется либо ничего не блокирует.
Вот что вышло
Код:
#include <BlockInputEx.au3>

HotKeySet("{ESC}", "_Quit")

AdlibRegister("_Quit", 10000)

_BlockInputEx(1,"{Esc}")

While 1
	_MyClick()
	Sleep(100)
WEnd

Func _Quit()
	_BlockInputEx(0)
    Exit
EndFunc

Func _MyClick()

    Local Static $i__Count = 0
    Local $i_X = 390, $i_Y = 255, $i_OffSet = 18, $i_Max = 16

	MouseClick('Left', 609, 216, 1)
    MouseClick('Left', $i_X, $i_Y + $i_OffSet * $i__Count, 1, 0)
    ConsoleWrite('$i_Y + $i_OffSet * $i__Count = ' & $i_Y + $i_OffSet * $i__Count & @LF)
    $i__Count += 1
    If $i__Count = $i_Max Then $i__Count = 0
EndFunc   ;==>_MyClick
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Сейчас проверил ваш код выход по Esc есть.
Только на команде
Код:
_BlockInputEx(0)
вываливается в ошибку.
Если её убрать, то всё проходит нормально.
 

be4hoctb

Новичок
Сообщения
38
Репутация
0
Да он блокирует и по Esc выходит но другие функции не выполняются
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Какие конкретно? Я вижу только одну _MyClick(). Курсор во время выполнения прыгает по экрану.
 
Верх