Что нового

BlockInputEx - Расширенная блокировка мышки и клавиатуры

rollin

Новичок
Сообщения
15
Репутация
1
CreatoR

Именно так.
Всю функцию привел для того, чтобы не объяснять долго где внес изменения. Только забыл отметить что именно изменил :-[
 

Yegorich_555

Новичок
Сообщения
20
Репутация
0
Всем привет. Вылезла проблемка при блокировании клавиатуры и мыши в сочетании с горячими клавишами:
Код:
#include <BlockInputEx.au3>
HotKeySet("+{F1}", "Lock")
HotKeySet("+{F2}", "UnLock")

Func Lock()
 _BlockInputEx(1, "0x10|{F2}")
EndFunc

Func UnLock()
  _BlockInputEx(0)
EndFunc

While 1
    Sleep(100)
WEnd

Сочетание клавиш Shift+F1 блокирует все, кроме двух клавиш Shift и F2. Соответственно Shift+F2 разблокирует все. Но...когда все заблокировано при нажатии клавиши F2 происходит разблокировка, но при этом действия и буквы выводит как будто при зажатом Shift. И так происходит пока не нажать Shift+F2. Такая ситуация проверена с разными сочетаниями клавиш...Как решить эту проблему?
Использую BlockInputEx_UDF_1.8 и autoit-v3.3.10.2 на Win7 x32 :smile:
 

Yegorich_555

Новичок
Сообщения
20
Репутация
0
Товарищ rollin подсказал решение, которое уже проверено и работает:
Проблема в логике обработки клавиш Shift - функция Unlock() вызывается из-за того что Shift остается в зажатом состоянии.
Код:
HotKeySet("+{F1}", "Lock")
- срабатывает при нажатии любого Shift, далее BlockInputEx() блокирует все сообщения кроме универсального кода нажатия Shift (0х10) - в этот момент физически клавиша еще не отжата и сообщения о ее отжатии (зависящее от того какая это клавиша - левая или правая) игнорируются.
Блокировку следует производить так:
Код:
_BlockInputEx(1, "{F2}|{LSHIFT}|{RSHIFT}")


Спасибо всем помогающим мне людям. Я написал простую программку для блокирования клавиатуры и мыши горячими клавишами:
Shift+F1 - блокируем клавиатуру и мышь
Shift+F2 - разблокирует клавиатуру и мышь
Shift+ё - закрывает программу (возможно только при разблокированной клавиатуре).
Программка все время висит в трее и перехватывает выше приведенные сочетания клавиш. Это может пригодится для защиты компа от детей и не только. Зачастую садишь мультики смотреть, а эти "2-х летние программисты" вечно что-нибудь нажмут)
Прикрепляю исходник и вот ссылка на exe файл. Может кому-то и пригодиться
Блокировка мыши и клавиатуры.exe
Блокировка мыши и клавиатуры.au3
 

be4hoctb

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

Код:
#RequireAdmin
#include <BlockInputEx.au3>

_BlockInputEx(2)
AdlibRegister("_Exit", 10000)

Opt ( "MouseClickDelay", 1000)

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

Func Stop ()
	_BlockInputEx(0)
	Exit 0
EndFunc


While 1
	_Eda()
	Sleep(500)
WEnd

Func _Eda()
       MouseClick('Left', 601, 72, 1)
       MouseClick('Left', 754, 104, 1)   
    $coord = PixelSearch(250, 313, 263, 325, 0x000000) ; Если поле найдено
    If Not @error Then
		MouseClick('Left', 878, 504, 1)
	Else
		MouseClick('Left', 100, 360, 1) 
     $coord = PixelSearch(250, 353, 263, 366, 0x000000) ; Если поле найдено
	 If Not @error Then
		MouseClick('Left', 610, 358, 1)

	 EndIf
	 EndIf

EndFunc

Но мышка не блокируется, пользователь может её перемещать.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
be4hoctb
У меня всё работает.
 

reset86

Новичок
Сообщения
47
Репутация
0
Создал тему Как заблокировать зум по ctrl колесико мыши в определенном окне?, в общем решения не нашлось (я хотел тему удалить, но нельзя).

Придумал вот такой вариант, на BlockInputEx. Вроде работает как надо, но постоянно происходит ошибка (рандомно по времени и условию) курсор начинает тормозить и скрипт завершает работу, в консоле никакой ошибки не появляется, просто скрипт закрывается и все. Путем экспериментов (подсунул в условие ToolTip и убрал _BlockInputEx), понял что проблема в BlockInputEx.
Что я делаю не так или возможно это баг?

Код:
#include <BlockInputEx.au3>
$dll = DllOpen("user32.dll")
; $hWnd = Нужное мне окно
Local $bDown = False, $bUp = True, $IsPressed
While 1
$IsPressed = _IsPressed("11", $dll)
If $IsPressed And Not $bDown Then
$bDown = True
$bUp = False
_BlockInputEx(1,'','{MWSCROLL}|{+}|{-}', $hWnd)
ElseIf Not $IsPressed And Not $bUp Then
$bDown = False
$bUp = True
_BlockInputEx(0)
EndIf
WEnd
DllClose($dll)



Добавлено:
Сообщение автоматически объединено:

Ошибка есть - 1073740771 и она появляется во всех других подобных скриптах, где происходит блокировка функций мыши. Win 10 64, Autoit 3.3.14.2.
 

RockMan

Новичок
Сообщения
67
Репутация
0
ребят подскажите как заблокировать нажатия клавиш и кликов мышки в определенном окне найденном по классу или заголовку ?
 

Вовчик55

Новичок
Сообщения
57
Репутация
0
Здравствуйте. Подскажите из-за чего может быть, что при заблокированной клавиатуре (от кошки использую, любит спать на ней, пока я смотрю видео) - при зажатых 3 клавишах комп начинает пикать (такое как раз бывает, при не заблокированной клавиатуре)
Согласно программе PassMark KeyboardTest - нажатий клавиш не происходит, но каким-то образом комп (клавитура) всё же возмущается, что нажато более 2 клавиш. Но это происходит не со всеми клавишами, а только с:
1) пробел (либо Alt) + H + N
2) пробел (либо Alt) + G + B
3) пробел (либо лев. Alt) + Y + H
4) пробел (либо лев. Alt) + T + G
(все эти клавиши как раз в том месте, где кошка локтями облокачивается :smile:)

Можно ли как-то это побороть? Или это уже аппаратная проблема
AutoIt v.3.3.12.0
BlockInputEx v.1.8
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вовчик55
Со встроенным BlockInput это происходит?
 

Вовчик55

Новичок
Сообщения
57
Репутация
0
CreatoR сказал(а):
Вовчик55
Со встроенным BlockInput это происходит?
А подскажите каким образом это проверить?
Я просто скачал архив, и использую из него (чуть изменив) "Example - Exclude usage.au3" (файл "BlockInputEx.au3" не пришлось копировать в Include - т.к. он там уже почему-то был (может я ранее уже копировал, не помню, винда давно уже установлена)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вовчик55 [?]
каким образом это проверить?
Код:
BlockInput(1)

Sleep(10000)

BlockInput(0)

После запуска скрипта попробовать нажимать указанные клавиши (у вас будет 10 секунд), и проверить проявляется ли проблема.

файл "BlockInputEx.au3" не пришлось копировать в Include - т.к. он там уже почему-то был
А надо было, возможно у вас там устаревшая версия.
 

Вовчик55

Новичок
Сообщения
57
Репутация
0
CreatoR сказал(а):
После запуска скрипта попробовать нажимать указанные клавиши (у вас будет 10 секунд), и проверить проявляется ли проблема.
То же самое (пикает при зажимании 3 клавиш одновременно)
 

hexin

Новичок
Сообщения
32
Репутация
0
Подскажите пожалуйста как заблокировать именно одну клавишу тильду на 5 секунд?
 
Последнее редактирование:
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <BlockInputEx.au3>

_BlockInputEx(1, "", "`")
Sleep(5000)
_BlockInputEx(0, "", "`")
 

hexin

Новичок
Сообщения
32
Репутация
0
Почему код показывает что нажата тильда в то время когда мы не нажимали вообще тильду.
Просто запустите код и сразу же будет уведомление что нажата тильда.

Код:
#include <BlockInputEx.au3>
Local $hDLL = DllOpen("user32.dll")

_BlockInputEx(1, "", "`") ;
sleep(50)
_BlockInputEx(0, "", "`") ;

While 1

      If _IsPressed("C0", $hDLL) Then ;
            MsgBox (4096,"",'нажата тильда')
      Else
      EndIf
      sleep(5)

WEnd
 
Последнее редактирование:
Верх