Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.05.2021, 00:31
Интересующийся
Отправить личное сообщение для abadon Посмотреть профиль Найти все сообщения от abadon
 
Регистрация: 25.02.2019
Сообщений: 14

перехват события клика и отмена клика
Я использую электрон, делаю макрос, отслеживаю нажатие правой мышки, после чего происходит нажатие на кнопку "5" и клик левой мышки и снова нажатие на кнопку "q", но мне нужно что бы по итогу нажатие правой мышки отменилось после обнаружение моим макросом, можно ли это как то реализовать?
const robot = require("robotjs")
const keys = require('global-keys')
const keyStream = new keys.KeyStream()

keyStream.on('data', state => {
    console.log(state); // array of ascii codes
    if(state[0]===2){
      robot.keyToggle('5', 'down')
      robot.setKeyboardDelay(1)
      robot.keyToggle('5', 'up')
      robot.mouseToggle("down");
      robot.setMouseDelay(1)
      robot.mouseToggle("up");
      robot.mouseToggle("down");
      robot.setMouseDelay(1)
      robot.mouseToggle("up");
      robot.keyToggle('q', 'down')
      robot.setKeyboardDelay(1)
      robot.keyToggle('q', 'up')
    }
})

и если это возможно, подскажите как , или тыкните меня носом в статью, заранее спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 28.05.2021, 09:30
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

abadon, насколько я понимаю, JS он и в Node.JS - JS...
Значит и события там реализованы одинаково. Т.ч. про отмену всплытия событий ты можешь почитать тут
https://learn.javascript.ru/event-bu...enie-vsplytiya
Ответить с цитированием
  #3 (permalink)  
Старый 28.05.2021, 09:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

abadon, сколько ни читаю про события в Ноде, там нет упоминаний о том как прекратить вызов обработчиков, навешанных на событие...
https://js-node.ru/site/article?id=22
https://nodejsdev.ru/doc/event-emitter/


В Ноде даже нет понятия о "всплытии" события, т.к. нет собственно "родителей", это чисто браузерная фишка...
Ответить с цитированием
  #4 (permalink)  
Старый 28.05.2021, 10:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

abadon,
наугад ...
if(state[0]===2){
keyStream.removeAllListeners(['data']);


или
let on = true;
keyStream.on('data', state => {
        console.log(state); // array of ascii codes
        if(state[0]===2 && on){
            on = false;
Ответить с цитированием
  #5 (permalink)  
Старый 28.05.2021, 11:52
Интересующийся
Отправить личное сообщение для abadon Посмотреть профиль Найти все сообщения от abadon
 
Регистрация: 25.02.2019
Сообщений: 14

да вы правы js он и в nodejs - js но с некоторыми задачами нужно заморочится, я пробовал стандартными способами как в браузере отлавливать события, и все бы хорошо, да вот только за пределами моей программы, скажем на рабочем столе события не отлавливались, поэтому пришлось находить модуль для глобального отлова событий, и информации про это очень мало
Ответить с цитированием
  #6 (permalink)  
Старый 28.05.2021, 11:58
Интересующийся
Отправить личное сообщение для abadon Посмотреть профиль Найти все сообщения от abadon
 
Регистрация: 25.02.2019
Сообщений: 14

Рони, 1 вариант отключает полностью отлов событий, но это для моей программы, я еще задумался над тем что даже если найти способ заблокировать правый клик, то все равно не факт что он будет блокироватся глобально, допустим у меня открыт браузер и моя программа, я кликнул правой мышкой, но браузер то так же отслеживает события и он покажет мне контекстное меню, и тут вопрос в том а кто первее перехватит событие, моя программа или браузер, так как если моя программа отловит событие после того как отловит браузер то это уже бесполезно, вобщем задачка очень сложная, я предполагаю что еще нужно сделать так что бы именно моя программа первая могла получить события а только потом все остальные программы, если что я использую еще electron
Ответить с цитированием
  #7 (permalink)  
Старый 28.05.2021, 12:24
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

я хз че там афтор хотел, но я понял, что он хочет отлавливать клик на уровне ОС, т.е. пропускать или не пропускать клик в зависимости от кейса, тогда:

https://wilix-team.github.io/iohook/...ickpropagation
Ответить с цитированием
  #8 (permalink)  
Старый 28.05.2021, 12:59
Интересующийся
Отправить личное сообщение для abadon Посмотреть профиль Найти все сообщения от abadon
 
Регистрация: 25.02.2019
Сообщений: 14

Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отмена события. - Отключить стрелку в календаре на прошлые дни miltorg Элементы интерфейса 8 03.12.2019 15:03
Отмена события artiom4356 Events/DOM/Window 29 21.10.2015 19:30
Очистка памяти, отмена загрузки картинки, отмена события. zhurchik Общие вопросы Javascript 16 23.10.2014 13:48
Перехват события клика ruzik jQuery 2 20.07.2014 21:24
отмена повторного выполнения события frant32 Events/DOM/Window 13 06.10.2012 12:25