web-dev-qa-db-fra.com

Auto-cliquez sur la souris lorsque vous maintenez enfoncé un bouton du clavier

J'ai un jeu qui nécessite que je clique sur un objet en mouvement à plusieurs reprises, ce qui est extrêmement difficile si vous ne disposez que d'un pavé tactile sans boutons de souris séparés.

Ce que je veux, c'est un outil/script qui émule à plusieurs reprises un clic de souris (bouton gauche, environ 5 clics par seconde) lorsqu'un bouton ou une combinaison de clavier spécifique est maintenu enfoncé, par exemple. Control (right)+Menu.

Je sais que je peux émuler des clics répétés avec une commande telle que

xdotool click --repeat 10 --delay 200 1

mais je ne sais pas comment le faire cliquer lorsqu'une combinaison de clavier spécifique est maintenue enfoncée au lieu d'un nombre fixe de clics.

3
Byte Commander

Voici mes première et cinquième tentatives. Le premier est correct si vous n'avez pas besoin de changer le délai. Il semble y avoir des problèmes avec certaines combinaisons de touches, mais il n’en est pas sûr.

Méthode 1, dans ~/.xbindkeysrc:

keystate_scrolllock = enable

"xdotool click 1"
    Scroll_Lock

Méthode 5:

keystate_scrolllock = enable

"/home/USER/infinite_clicks.sh event16 KEY_SCROLLLOCK 0.1 &"
    Scroll_Lock

Avec infinite_clicks.sh étant:

#!/bin/bash
kbd=$1 #"event16"
key=$2 #"KEY_SCROLLLOCK"
delay=$3 #"0.1"
fn=`basename "$0"`

if [  $# -le 1 ]; then 
    echo "Usage: $fn input_device key_name delay"
    echo "Example: $fn event16 KEY_SCROLLLOCK 0.1"
    echo "Must run as superuser."
    exit 1
fi 

# do not start if already started
if [[ $(pidof -o %PPID -x $fn) ]]; then
    exit 0
fi

while true; do
    # this is why you need to use Sudo/superuser
    evtest --query  /dev/input/$kbd EV_KEY $key

    # get evtest return code, if it's 0 the key is up
    if [[ "$?" -eq "0" ]]; then
      break
    fi

    xdotool click 1 &
    sleep "$delay"
done

exit 0

Avec ce code, vous devez également exécuter xbindkeys en tant que Sudo xbindkeys -f ~/.xbindkeysrc

Vous pouvez trouver votre numéro d’événement au clavier en utilisant Sudo evtest, puis les noms de touches en utilisant Sudo evtest /dev/input/eventXXX en utilisant le numéro d’événement.

1
Annan