Нажмите с robotjs, когда скорость мыши низкая - PullRequest
0 голосов
/ 13 октября 2019

Чего я пытаюсь достичь?
Я пытаюсь создать программу (например, sofType ) с инструментами автоматического нажатия и экранной клавиатурой для инвалидов. ,

Почему я это делаю?
Я делаю это, потому что sofType стоит дорого, и некоторые страны не помогают этим людям финансово в этой программе.

Будет ли это бесплатно?
Да, также с открытым исходным кодом (Github-link здесь ).

Что такоемоя проблема на сегодня? Текущее поведение : мышь щелкает, даже если ее скорость выше ожидаемой.
Ожидаемое поведение : Как только скорость мыши будет == 100, она должна щелкнуть и сделать все остальное.

Код
index.js

const robot =require('robotjs');
const mousemoved = require('iohook');
let {isPressed, hasBeenUsed,windowHasBeenLoaded} = false;
let {lastX,lastY,cursorX, cursorY} = 0;
let mouseMove,prev;

mousemoved.on('mousemove',ev => mouseMove(ev));

mouseMove = (events)=>{
  if(hasBeenUsed) return;

  if(!windowHasBeenLoaded){
    windowHasBeenLoaded = true;
    prev ={x:events.x,y:events.y,prevTime : Date.now()};
    event = events
  }

  lastY = events.y;
  lastX = events.x;

  console.log(calculator(events,prev).mSpeed)

  if((calculator(events,prev).mSpeed == 100 && calculator(events,prev).mSpeed > 0) && (calculator(events,prev).mVelocity <= 0.04) && (calculator(events,prev).mMovement <= 1 && calculator(events,prev).mMovement > 0) && !isPressed){    
    hasBeenUsed=true;        
    mousemoved.removeAllListeners('mousemove')  
    setTimeout(() => {
      robot.mouseClick() 
      mousemoved.on('mouseclick', (e) => {
        cursorX = e.x;
        cursorY = e.y;
      });
      isPressed = true; hasBeenUsed = false
      mousemoved.on('mousemove',event => mouseMove(event))
    }, 1000);
  }

  if((diff(cursorX,lastX) > 57 || diff(lastY,cursorY) > 57) && (isPressed && !hasBeenUsed)){ 
    isPressed = false;
  }
  prev ={x:events.x,y: events.y,prevTime : Date.now()};
}

mousemoved.start();

functions.js

function squareroot(number) {
  let lo = 0, hi = number;
  while(lo <= hi) {
       let mid = Math.floor((lo + hi) / 2);
       if(mid * mid > number) hi = mid - 1;
       else lo = mid + 1;
  }
  return hi;
}

let calculator=(currentEvent,prevEvent)=>{
  let time = Date.now();

  let movementX=Math.abs(currentEvent.x-prevEvent.x);
  let movementY=Math.abs(currentEvent.y-prevEvent.y);
  let movement=squareroot(movementX*movementX+movementY*movementY);

  let speed=100*movement;
  let velocity = (movement / (time - prevEvent.prevTime));

  return {mSpeed:speed,mVelocity:velocity,mMovement:movement}
}
let diff=(num1, num2)=>{
  return (num1 > num2)? num1-num2 : num2-num1
}

Другая информация

  • Версия электрона: 5.0.0
  • Версия узла: 10.16.3
  • Версия Robotjs: 0.5.1
  • Версия IoHook: 0.4.6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...