Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Разблокирование Клавиатуры и мыши по нажатию на {ESC}

Ответить
Настройки темы
[решено] Разблокирование Клавиатуры и мыши по нажатию на {ESC}

Ветеран


Сообщения: 903
Благодарности: 161


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: saavaage
Дата: 03-08-2010
Собственно, не срабатывает такой скрипт:

Код: Выделить весь код
#include <BlockInputEx.au3>

;================== Block All Example ==================

HotKeySet("", "_Quit") ; отработка функции _Quit при нажатии на ескей

;Блокирует клавиатуру и мышь. Исключение - нажатие на клавишу Ескей
_BlockInputEx(1, "0x1B")

;на всякий случай, разблокировка в любом случае через 15 seconds.
Sleep(15000)
_BlockInputEx(0)

Func _Quit() ; задание самой функции _Quit (разблокирования)
	_BlockInputEx(0)
EndFunc
Ставилась задача: на время исполнения скрипта блокировать клавиатуру и мыш, с возможностью их разблокировки в любой момент выполнения скрипта.

Скрипт -немного модифицированный пример из _BlockInputEx_UDF_1.3 (от MrCreator).

Отправлено: 01:27, 03-08-2010

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата saavaage:
не срабатывает такой скрипт »
И не должен, в HotKeySet не указана клавиша для вызова функции

Кстати можно и так:

Код: Выделить весь код
_BlockInputEx(1, "{ESC}")

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 01:50, 03-08-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


Creat0R, это я пропустил, когда копировал. На компе, естессвенно, с {ESC}. Не работает. Уже и так и так пробЫвал.

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 01:54, 03-08-2010 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата saavaage:
На компе, естессвенно, с {ESC} »
Ну тогда у меня работает, а в чём проблема?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 01:56, 03-08-2010 | #4


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


Creat0R, может быть в моей функции? у меня версия 1.3

Вот получившийся скрипт:

Код: Выделить весь код
#include <BlockInputEx.au3>

;================== Block All Example ==================

HotKeySet("{ESC}", "_Quit") ; отработка функции _Quit при нажатии на ескей

;Блокирует клавиатуру и мышь. Исключение - нажатие на клавишу Ескей
_BlockInputEx(1, "{ESC}")

;на всякий случай, разблокировка в любом случае через 15 seconds.
Sleep(15000)
_BlockInputEx(0)

Func _Quit() ; задание самой функции _Quit (разблокирования)
	_BlockInputEx(0)
EndFunc
лежит у меня в одной директории с функцией (ее прикрепил к шапке топика). Разблокировка не отрабатывает.

На всякий, прикрепил сам скомпилированный файл. Разблокировка по любому через 15 сек

Последний раз редактировалось saavaage, 30-09-2010 в 01:48.


Отправлено: 01:59, 03-08-2010 | #5


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


Creat0R, не знаю, в чем было дело, но после перезагрузки ПК, все отработало на ура. Спасибо. Тема закрыта.

-------
мы рождены, чтоб сказку сделать былью


Последний раз редактировалось saavaage, 03-08-2010 в 05:37.


Отправлено: 03:39, 03-08-2010 | #6


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


Creat0R, рано я обрадовался.. Обнаружил такой косячок:
если просто нажимаешь F8, то блокировка снимается;
если же сначала нажать Ctrl+Alt+Del, то потом жать на F8 бесполезно. Даже и не знаю, как это "объехать"...

Код:
Код: Выделить весь код
;Предотвращение появление процесса-клона
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

;Блокирование ПК
#include <BlockInputEx.au3>
Opt("WinWaitDelay", 1)
$sTaskMgr_Title = "[CLASS:#32770;REGEXPTITLE:(Диспетчер задач|Task Manager)]"
;Disable Task Manager
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", "1")

HotKeySet("{F8}", "_Quit") ; отработка функции _Quit при нажатии на F8

;Блокирует клавиатуру и мышь. Исключение - нажатие на клавишу F8
_BlockInputEx(1, "{F8}")

Func _Quit() ; задание самой функции _Quit (разблокирования)
	_BlockInputEx(0)
EndFunc

; в случае, если скрипт запускается из батника, то первый параметр ком . строки передаетс в $line (задаем время отработки прогресс-бара)
if $CmdLine[0] > 0 Then
    $line = $CmdLine[1]
Else
	;иначе идет считывание из finish.cmd времени отработки прогрессбара и передача этого значения в  переменную $line
    $line = FileReadLine(@ScriptDir & "\finish.cmd", 2)
EndIf


$iPID = Run(@COMSPEC & ' /c %SYSTEMDRIVE%\finish.cmd', "", @SW_HIDE)
While ProcessExists($iPID)
$Title = "Пожалуйста, подождите..."             ; Заголовок
$SubTitle = "Происходит финализация установки"  ; Суб-заголовок
$Message  = "После удаления мусора, оставшегося от установки" & @CRLF ; Сообщение. Записано в таком виде для удобства
$Message &= "XP и создания/перемещения ярлыков, Система" & @CRLF
$Message &= "будет перезагружена. Осталось времени: "

$Time = $line       ; Время здесь хранится в миллескундах. 1 с = 1000 мс

$Sleep = 0.01 * 100000    ; 10 мс. Меньше 1 мс ставить не рекомундуется. Впрочем, тут и 100 мс хватает.

$Timer = TimerInit() ; Инициализация таймера.

ProgressOn($Title, $SubTitle, $Message & $Time) ; Параметры: заголовок, суб-заголовок, сообщение. Включаем окно прогресса.
While TimerDiff($Timer) < $Time ; Пока прошло времени меньше чем нужно - повторять:
    ProgressSet(TimerDiff($Timer) / $Time * 100, $Message & Round(($Time - TimerDiff($Timer)) / 1000, 0) & " секунд")
    ; ProgressSet ( percent [, "subtext" [, "maintext"]] )
    ; Параметр 1: процент прогресса. Прошедшее время делим на требуемое и умножаем на 100
    ; Параметр 2: сообщение. Стандартное, как в перменной $Message плюс оставшееся время округлённое до целых
    ; Параметр 3: опциональный. Здесь не используется.
    Sleep($Sleep); Подожать $Sleep мс
WEnd
WEnd
ProgressSet(100, "ПЕРЕЗАГРУЗКА!  УДАЧНОЙ  РАБОТЫ!") ; Выводим последнее сообщение.
Sleep(3000) ; Чтобы было видно последнее сообщение.

;Enable Task Manager back
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", "0")

; Функция самоудалениея скрипта 
#Include <File.au3>
Func _ScriptDestroy()
    $sTemp = _TempFile(@TempDir, '~', '.bat')
    $sPath = FileGetShortName(@ScriptFullPath)
    $hFile = FileOpen($sTemp, 2)
    FileWriteLine($hFile, '@echo off')
    FileWriteLine($hFile, ':loop')
    FileWriteLine($hFile, 'del ' & $sPath)
    FileWriteLine($hFile, 'if exist ' & $sPath & ' goto loop')
    FileWriteLine($hFile, 'del ' & $sTemp)
    FileClose($hFile)
    Run($sTemp, '', @SW_HIDE)
EndFunc   ;==>_ScriptDestroy

_ScriptDestroy()

Sleep(1000)
Shutdown(2)

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 12:18, 03-08-2010 | #7


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата saavaage:
если же сначала нажать Ctrl+Alt+Del, то потом жать на F8 бесполезно »
Получилось воспроизвести проблему. Дело в том, что по непонятным мне причинам, происходит залипание этих клавиш (Ctrl+Alt), и любые последующие попытки использовать HotKeySet заканчиваются неудачей. Для исправления ситуаций достаточно нажать на эти клавиши повторно, но вот как это сделать программно...

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 12:45, 03-08-2010 | #8


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


Creat0R, может привязать к функции разблокировки не только:

_BlockInputEx(0)

но и разблокировать диспетчер задач:

Цитата saavaage:
;Enable Task Manager back
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", "0") »
Это не поможет?

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 12:51, 03-08-2010 | #9


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата saavaage:
Это не поможет? »
Нет, я проверял вообще без отключения диспетчера:

Код: Выделить весь код
#include <BlockInputEx.au3>

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

Sleep(5000)

Func _Quit()
    _BlockInputEx(0)
EndFunc
Проблема именно в залипании «Ctrl + Alt». Я что то не могу найти как програмно “отлепить” эти клавиши - я бы тогда смог это добавить в функцию (определение нажатия Alt + Ctrl + Del и последующее их отлипание).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 13:02, 03-08-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Разблокирование Клавиатуры и мыши по нажатию на {ESC}

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Клавиатура - Покупка беспроводной клавиатуры и мыши GooG1e Выбор отдельных компонентов компьютера и конфигурации в целом 1 30-04-2010 13:06
[решено] Блокировка клавиатуры и мыши leprecon AutoIt 12 12-07-2009 20:37
Обрубание мыши и клавиатуры kelz Microsoft Windows 2000/XP 9 06-04-2006 08:24
Как избавиться от необходимости нажатия ESC после изменении расклада клавиатуры? Do Not Disturb Microsoft Windows 95/98/Me (архив) 3 16-02-2005 23:32
Блокировка клавиатуры и мыши Sonic Программирование и базы данных 6 24-04-2004 04:59




 
Переход