Автор Тема: BlockInputEx - Расширенная блокировка мышки и клавиатуры  (Прочитано 62295 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827

  • Автор темы
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Alexander  [?]
Цитировать
как с минимальным количеством действий заблокировать, например, Alt
Alt сама по себе проблематичная клавиша, по идее должно было работать так:

Код: AutoIt [Выделить]
_BlockInputEx(3, "", "{ALT}")


но увы, оказалось что оно блокирует только отжатие клавиши, это можно увидеть например, при попытке переключения окон (Alt + Tab).

Обойти можно так:
Код: AutoIt [Выделить]
_BlockInputEx(3, "", "[:SPECIAL:]")

но это блокирует и другие служебные клавиши.


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Русское сообщество AutoIt

Re: BlockInputEx - Расширенная блокировка мышки и клавиатуры
« Ответ #30 Отправлен: Июнь 14, 2011, 14:32:38 »

Оффлайн Alexander [?]

  • Новичок
  • *
  • Сообщений: 105
  • Репутация: 2
    • Награды
CreatoR
Я не то имел ввиду. Как без библиотеки с минимальным количеством действий заблокировать, например, Alt
То есть вытащить из библиотеки минимум действий  :)

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827

  • Автор темы
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Alexander  [?]
Цитировать
Как без библиотеки с минимальным количеством действий заблокировать
Зачем?

Оффлайн Alexander [?]

  • Новичок
  • *
  • Сообщений: 105
  • Репутация: 2
    • Награды
Чтоб понять как это все работает (+ еще бывало такое, что блокировало просто так клавишу и пришлось перезагружать компьютер)...

Русское сообщество AutoIt

Re: BlockInputEx - Расширенная блокировка мышки и клавиатуры
« Ответ #33 Отправлен: Июнь 22, 2011, 15:30:36 »

Оффлайн La2Angel [?]

  • Новичок
  • *
  • Сообщений: 144
  • Репутация: 0
    • Награды
Как избежать проблему, в вин 7 при нажатии CTRL+ALT+DEl перестает блокировать клавиатуру.

Оффлайн hohmuch [?]

  • Сообщений: 36
  • Репутация: -2
    • Награды
БЛОКИНПУТ с русской раскладкой не работает, помогите плиз.

Оффлайн jawello [?]

  • Новичок
  • *
  • Сообщений: 4
  • Репутация: 0
    • Награды
отличная библиотека. спасибо.

возник вопрос. у меня скрипт создает окно с прогресс баром, и пока скрипт выполняется, хотелось бы заблокировать все окна, кроме окна самого скрипта (на него повесить кнопочки, н-р стоп, пауза, плей). я подозреваю, что можно получить список всех открытых окон и в цикле пробежать вызывая функцию блокирования окна, для каждого из открытых окон. но может быть есть уже готовое решение для подобной проблемы?

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827

  • Автор темы
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
jawello  [?]
Цитировать
хотелось бы заблокировать все окна, кроме окна самого скрипта
Ну так в архиве последней версий есть же пример «Example - Exclude Spec Window.au3».

Русское сообщество AutoIt

Re: BlockInputEx - Расширенная блокировка мышки и клавиатуры
« Ответ #37 Отправлен: Январь 17, 2012, 14:13:49 »

Оффлайн rusreg79 [?]

  • Продвинутый
  • ***
  • Сообщений: 159
  • Репутация: 57
  • Пол: Мужской
    • Награды
Встроенная BlockInput блокирует действия юзера но не блокирует команды скрипта Send, MouseClick и т.д.
Возможно ли что бы BlockInputEx так же действовала, и не блокировала команды скрипта?
Программаторы программировали, программировали, да не выпрограммировали

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827

  • Автор темы
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
rusreg79  [?]
Цитировать
Возможно ли что бы BlockInputEx так же действовала, и не блокировала команды скрипта?
Обновил библиотеку (ровно год и один месяц после выхода предыдущей версии :) ):

Цитировать
[v1.7 - 04.05.2012, 18:45]
* Теперь по умолчанию блокирование ввода влияет только на ввод пользователя, как и в стандартной функции BlockInput. Это можно изменить используя новый параметр $iBlockAllInput, если указать 1, то будет блокироваться любой ввод (включая от функции типа Send и MouseMove), в противном случае только ввод пользователя будет блокирован.
* Добавлен новый параметр $iBlockAllInput для возможности блокировки только пользовательского ввода (по умолчанию 0, только ввод пользователя будет блокирован).
* Мелкие поправки.

Оффлайн Крепыш [?]

  • Новичок
  • *
  • Сообщений: 105
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Написал скрипт, который:
1) Блокирует компьютер при запуске нежелательных приложений;
2) Блокирует клавиатуру и кнопки мыши при простое компьютера в течение определённого времени. Это нужно, чтобы наблюдать происходящее на экране, но чтобы никто не мог производить никаких действий на компьютере.

Код: AutoIt [Выделить]
#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() взята отсюда: Можно ли отследить бездействие системы?

Оффлайн rollin [?]

  • Новичок
  • *
  • Сообщений: 15
  • Репутация: 1
    • Награды
Я видимо плохо разобрался:
Код: AutoIt [Выделить]
#include <BlockInputEx.au3>

;================== Exclude usage Example ==================

HotKeySet("{ESC}", "_Quit")
HotKeySet("{F1}", "_Quit")
HotKeySet("{Pause}", "_msg")
Run(@WindowsDir & "\Notepad.exe", "", @SW_MAXIMIZE)
WinWait("[REGEXPCLASS:Notepad.*]")
$hNotepad_Wnd = WinGetHandle("[REGEXPCLASS:Notepad.*]")
ControlSetText($hNotepad_Wnd, "", "", "first row"&@CRLF&"second row"&@CRLF&"third row")
;All keyboard keys and mouse clicks are blocked except these keys: {ESC}, "{F1}", "{PAUSE}"

_BlockInputEx(1, "{ESC}|{F1}|{PAUSE}")

While 1
    Sleep(100)
WEnd

Func _Quit()
    Exit
EndFunc

Func _msg()
    MsgBox(64,"","pause pressed",5)
EndFunc


По идее, скрипт должен заблокировать весь инпут кроме ESC,F1 и PAUSE. Но стрелки, HOME, END, DEL и их сочетания с RSHIFT,RCTRL, а также ENTER,*,/ на цифровой клавиатуре, остаются рабочими.
Очень нужно заблочить любой ввод, кроме перечисленного в Exclude.
PS:про CTRL+ALT+DEL прочитал - раз невозможно, так невозможно, а тем более мне это не критично.
« Последнее редактирование: Ноябрь 06, 2012, 17:08:14 от rollin »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827

  • Автор темы
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
rollin  [?]
Цитировать
Очень нужно заблочить любой ввод, кроме перечисленного в Exclude
Укажи в качестве последнего параметра 1 (_BlockInputEx(1, "{ESC}|{F1}|{PAUSE}", "", "", 1)), это блокирует любой ввод, не только пользователя (включая Send, Mouse* и т.п.).
Не уверен почему, но некоторые клавиши на цифровой части клавиатуры не определяются как ввод пользователя (у меня кстати это только 3: «NumLock», «/» и «Enter».

Оффлайн rollin [?]

  • Новичок
  • *
  • Сообщений: 15
  • Репутация: 1
    • Награды
CreatoR
Цитировать
Укажи в качестве последнего параметра 1 (_BlockInputEx(1, "{ESC}|{F1}|{PAUSE}", "", "", 1)), это блокирует любой ввод, не только пользователя (включая Send, Mouse* и т.п.)

К сожалению, это мне не подходит. Я некорректно описал задачу. Блокировать нужно только пользовательский инпут. Скрипт, в котором я хотел бы использовать вашу библиотеку, работает с приложением как-раз  посредством Send и MouseClick. Фактически, блокировка нужна только для исключения возможности случайного ввода с клавиатуры или мыши, а в Exclude хотел добавить комбинации клавиш для контроля работы скрипта.
Если есть идеи, буду рад советам!
А если чего непонятно написал, прошу простить и помиловать - за помощью обращаюсь впервые.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827

  • Автор темы
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
rollin  [?]
Цитировать
Если есть идеи, буду рад советам!
Позже посмотрю в чём проблема с библиотекой, видимо что то не учёл при обработке хука.

Русское сообщество AutoIt

Re: BlockInputEx - Расширенная блокировка мышки и клавиатуры
« Ответ #44 Отправлен: Ноябрь 06, 2012, 21:18:52 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
9 Ответов
13004 Просмотров
Последний ответ Май 20, 2010, 17:51:50
от Detka.i.alex
11 Ответов
6732 Просмотров
Последний ответ Октябрь 12, 2017, 17:11:51
от Tyr
2 Ответов
2807 Просмотров
Последний ответ Ноябрь 14, 2012, 17:20:51
от cthutq
1 Ответов
1810 Просмотров
Последний ответ Апрель 13, 2014, 16:35:59
от madmasles
15 Ответов
4830 Просмотров
Последний ответ Декабрь 03, 2014, 10:45:02
от be4hoctb
0 Ответов
1784 Просмотров
Последний ответ Май 19, 2015, 08:56:36
от jslby
0 Ответов
1123 Просмотров
Последний ответ Май 19, 2015, 10:28:18
от Yashied
11 Ответов
2366 Просмотров
Последний ответ Апрель 26, 2016, 16:25:05
от Vovsla
2 Ответов
580 Просмотров
Последний ответ Сентябрь 01, 2017, 11:50:23
от gerkuless
6 Ответов
586 Просмотров
Последний ответ Февраль 08, 2018, 17:08:29
от yl3d