Ir ao conteúdo
  • Cadastre-se

C Tem como manipular a setinha do mouse em c++


Posts recomendados

Olá senhores tudo bem? venho aqui fazer o apelo de que preciso manipular o cursor do meu mouse através da linguagem c ou c++ eu uso Windows 10. já ouvir falar que é possível pegar as cordenadas então não deve ser difícil altera-las movendo o mouse.

Preciso também criar um mouse virtual o que vou precisar? A solução mais rápida e fácil é agradável. grato desde já.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Jorge Curvelo Serve a função GetCursorPos()?

Teste isso:

#include <stdio.h>
#include <windows.h>

void limparTela(){
    COORD coord;
    DWORD written;
    CONSOLE_SCREEN_BUFFER_INFO info;

    coord.X = 0;
    coord.Y = 0;
    GetConsoleScreenBufferInfo ( GetStdHandle ( STD_OUTPUT_HANDLE ), &info );
    FillConsoleOutputCharacter ( GetStdHandle ( STD_OUTPUT_HANDLE ), ' ',
    info.dwSize.X * info.dwSize.Y, coord, &written );
    SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coord );
    return;
}

int main()
{
    POINT posicao;
    int x, y;
    do{
        if (GetCursorPos(&posicao) && posicao.x != x && posicao.y != y) {
            limparTela();
            printf("<%ld, %ld>\n", posicao.x, posicao.y); //Imprime posição do cursor
            x = posicao.x;
            y = posicao.y;
        }
    }while(true);
    return 0;
}

Se a posição do mouse não mudar, ou seja, se ele estiver parado, não imprime nada, mas se a mesma for alterada, daí imprime a posição.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Jorge Curvelo Que tal SetCursorPos()?

Teste isso:

#include <stdio.h>
#include <windows.h>

void limpartela(){
    COORD coord;
    DWORD written;
    CONSOLE_SCREEN_BUFFER_INFO info;

    coord.X = 0;
    coord.Y = 0;
    GetConsoleScreenBufferInfo ( GetStdHandle ( STD_OUTPUT_HANDLE ), &info );
    FillConsoleOutputCharacter ( GetStdHandle ( STD_OUTPUT_HANDLE ), ' ',
    info.dwSize.X * info.dwSize.Y, coord, &written );
    SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coord );
    return;
}

int main()
{
    int x, y;
    char novamente;
    do{
        printf("Digite as coordenadas no formato x,y: ");
        scanf("%d,%d", &x, &y);
        SetCursorPos(x, y); //Muda a posição do cursor
        printf("\nQuer testar novamente (s/n)? ");
        scanf("\n%c", &novamente);
        if (novamente == 's'){
            limpartela(); //Limpa a tela se quiser testar novamente
        }
    }while(novamente == 's');
    return 0;
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Jorge Curvelo

Imagine fazer um loop para gerar valores aleatórios para x e y, e usar a tal da função SetCursorPos() para mudar a posição do cursor... E ainda mudar a cor do fundo do console aleatoriamente com mensagens tipo ERRO... Daria um belo de um susto em quem executasse kk.

Não use para o mau...

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Jorge Curvelo

 

#include <windows.h>

int main()
{
    //Mover mouse para o centro da tela
    MOUSEINPUT m1 = (MOUSEINPUT){.dx=32768, .dy=32768, .mouseData=0,
                    .dwFlags=MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, .time=0};
    //Clicar com o botão direito do mouse
    MOUSEINPUT m2;
    m2.dwFlags=MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP;
    m2.time=0;
    
    //Vetor de entradas para juntar as ações do mouse:
    INPUT in[2];
    
    in[0]=(INPUT){.type=INPUT_MOUSE, .mi=m1};
    
    in[1].type=INPUT_MOUSE;
    in[1].mi=m2;
    
    //Realiza as ações de entrada do mouse:
    SendInput(2, in, sizeof *in);

    return 0;
}

 

Foram usados:

SendInput()

INPUT

MOUSEINPUT

 

 

  • Curtir 2
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Jorge Curvelo  Basta não usar inicializadores designados...

 

#include <windows.h>

int main()
{
    /*Mover mouse para o centro da tela*/
    MOUSEINPUT m1;
    m1.dx=32768;
    m1.dy=32768;
    m1.mouseData=0;
    m1.dwFlags=MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
    m1.time=0;
    
    /*Clicar com o botão direito do mouse*/
    MOUSEINPUT m2;
    m2.dwFlags=MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP;
    m2.time=0;
    
    /*Vetor de entradas para juntar as ações do mouse:*/
    INPUT in[2];
    
    in[0].type=INPUT_MOUSE;
    in[0].mi=m1;
    
    in[1].type=INPUT_MOUSE;
    in[1].mi=m2;
    
    /*Realiza as ações de entrada do mouse:*/
    SendInput(2, in, sizeof *in);

    return 0;
}

 

Tá usando qual IDE? Que compilador? No GCC só to conseguindo gerar esse tipo de warning se eu configurar para compilar seguindo o bem antigo padrão C90 da linguagem.

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!