Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   перехват события клика и отмена клика (https://javascript.ru/forum/node-js-io-js/82581-perekhvat-sobytiya-klika-i-otmena-klika.html)

abadon 28.05.2021 00:31

перехват события клика и отмена клика
 
Я использую электрон, делаю макрос, отслеживаю нажатие правой мышки, после чего происходит нажатие на кнопку "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')
    }
})

и если это возможно, подскажите как :blink: , или тыкните меня носом в статью, заранее спасибо

ksa 28.05.2021 09:30

abadon, насколько я понимаю, JS он и в Node.JS - JS... :)
Значит и события там реализованы одинаково. Т.ч. про отмену всплытия событий ты можешь почитать тут
https://learn.javascript.ru/event-bu...enie-vsplytiya

ksa 28.05.2021 09:57

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

В Ноде даже нет понятия о "всплытии" события, т.к. нет собственно "родителей", это чисто браузерная фишка...

рони 28.05.2021 10:22

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;

abadon 28.05.2021 11:52

да вы правы js он и в nodejs - js но с некоторыми задачами нужно заморочится, я пробовал стандартными способами как в браузере отлавливать события, и все бы хорошо, да вот только за пределами моей программы, скажем на рабочем столе события не отлавливались, поэтому пришлось находить модуль для глобального отлова событий, и информации про это очень мало

abadon 28.05.2021 11:58

Рони, 1 вариант отключает полностью отлов событий, но это для моей программы, я еще задумался над тем что даже если найти способ заблокировать правый клик, то все равно не факт что он будет блокироватся глобально, допустим у меня открыт браузер и моя программа, я кликнул правой мышкой, но браузер то так же отслеживает события и он покажет мне контекстное меню, и тут вопрос в том а кто первее перехватит событие, моя программа или браузер, так как если моя программа отловит событие после того как отловит браузер то это уже бесполезно, вобщем задачка очень сложная, я предполагаю что еще нужно сделать так что бы именно моя программа первая могла получить события а только потом все остальные программы, если что я использую еще electron

SuperZen 28.05.2021 12:24

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

https://wilix-team.github.io/iohook/...ickpropagation

abadon 28.05.2021 12:59

Спасибо


Часовой пояс GMT +3, время: 02:34.