Чего я пытаюсь достичь?
Я пытаюсь создать программу (например, 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