simular uma tecla Enter pressionada no clique do mouse (ubuntu)

Oct 27 2020

Estou jogando cs1.6 no Ubuntu 20.04 LTS usando wine-5.0 (Ubuntu 5.0-3ubuntu1), mas tenho esse problema estranho de clique do mouse no jogo, apenas com pistolas e armas, sempre que clico rápido para atirar depois de dois / um balas disparadas há um atraso (o mouse nem dispara por um segundo) no disparo.

Mas quando eu uso a tecla Enter para atirar, as balas são disparadas suavemente (a rodada inteira).

Agora estou procurando uma maneira de simular a tecla Enter pressionada no clique esquerdo do mouse.

Podemos fazer isso ?

Respostas

ShoyebSheikh Oct 29 2020 at 16:21

Para aqueles que desejam conseguir isso no Linux,

Fiz um programa em c ++ para capturar o clique do mouse e Enterpressionar a tecla logo em seguida.

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <linux/input.h>
#include <cstring>

int main(int argc, char **argv)
{
    struct input_event event;
    int fd, bytes;
    unsigned char data[3];
    bool down = false;

    const char *pDevice = "/dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse";

    fd = open(pDevice, O_RDONLY | O_NONBLOCK);
    if (fd == -1)
    {
        printf("ERROR Opening %s\n", pDevice);
        return -1;
    }

    while (1)
    {
        memset((void *)&event, 0, sizeof(event));
        bytes = read(fd, (void *)&event, sizeof(event));
        if (event.type == 1 && event.code == 272 && event.value == 1)
        {
            down = true;
        }
        if (event.type == 1 && event.code == 272 && event.value == 0)
        {
            down = false;
        }
        if (down)
            system("xdotool key Return");
    }
    return 0;
}

No programa acima, tentei ler os eventos e dados do mouse diretamente do dispositivo em "/ dev / input / by-id", meu nome de arquivo de eventos do dispositivo é "usb-Logitech_USB_Receiver-if01-event-mouse".

Depois de ter os eventos em uma variável (isto é, evento), meu código do botão esquerdo do mouse é 272, não tenho certeza se é o número do código universal para o botão esquerdo do mouse, event.type = 1 (não tenho certeza sobre isso mesmo), event.value = 1 é botão do mouse para baixo / evento pressionado enquanto event.value = 0 é mouse para cima / evento liberado.

Uma vez que o mouse é pressionado temos que apertar a Entertecla do teclado, para isso eu usei xdotool, certifique-se de que instalou xdotool.

xdotool key Return aciona o evento de tecla Enter pressionada no teclado.

compile-o para produzir um executável chamado mouse

então você pode executá-lo usando sudo ./mouse&

& é executar o comando em segundo plano.

É isso, agora sempre que o botão esquerdo do mouse é pressionado, a Entertecla do teclado é pressionada até que você solte o clique do botão.

Nota: Este programa usa 100% cpu coz do loop while infinito, mas é normal.

Eu testei isso no cs1.6 quando disparei da pistola usando a tecla esquerda do mouse para baixo, o tiro inteiro disparou automaticamente com a Entertecla pressionada até que eu segurei a tecla do mouse para cima.

Certifique-se de colocar a Enterchave para Fire em atalhos de teclado nas configurações de cs1.6, tenho a Enterchave como primária e a -chave como alternativa para Fire em atalhos de teclado.