Ir ao conteúdo

C como fazer o mouse clicar em uma posição da tela


Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Postado

           olá pessoal alguém poderia me ajudar nesse código , estou querendo fazer o mouse clicar com o botão esquerdo na posição onde a setinha do mouse está apontando na tela ,  e ali ele minimizaria um outro programa que esteja rodando em uma janela mais pequena , e isso é apenas para estudos mesmo não tem nenhuma finalidade prática não ,  por enquanto ,  agradeço se puderem me ajudar ,  obrigado !

#include <windows.h>
int main()
{
    BYTE keyState[256];
    POINT p;
    GetCursorPos(&p);
    SetCursor(&p);
    GetKeyboardState((LPBYTE)&keyState);  // esse aqui do NumLook funciona bem , mas é no teclado
    keybd_event( VK_NUMLOCK,0x45,KEYEVENTF_EXTENDEDKEY | 0,0);               // pressiona o botao
    keybd_event( VK_NUMLOCK,0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); // solta o botao
    return 0;
    ULONG_PTR pyr;
    mouse_event(MOUSEEVENTF_LEFTDOWN ,p.x,p.y,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP   ,p.x,p.y,0,0);

    mouse_event(MOUSEEVENTF_LEFTDOWN ,p.x,p.y,0,0); // coloquei duas vezes para garantir 
    mouse_event(MOUSEEVENTF_LEFTUP   ,p.x,p.y,0,0); // pois o outro program está na tela  mas em segundo plano

    mouse_event(MOUSEEVENTF_RIGHTDOWN,0x08,0,0,0); // aqui para testar o clique do botão Direito
    mouse_event(MOUSEEVENTF_RIGHTUP  ,0x10,0,0,0);
}

 

  • Solução
Postado

@devair1010

28 minutos atrás, devair1010 disse:

e ali ele minimizaria um outro programa que esteja rodando em uma janela mais pequena

Não sei bem se entendi a finalidade 🤔

 

32 minutos atrás, devair1010 disse:

estou querendo fazer o mouse clicar com o botão esquerdo na posição onde a setinha do mouse está apontando na tela

Se quer sintetizar o evento de um clique do mouse, pode usar SendInput():

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

int main()
{
    INPUT in;

    in.type = INPUT_MOUSE;
    in.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
    in.mi.time = 0;

    SendInput(1, &in, sizeof(in));

    return 0;
}

Você pode ler sobre a função aqui, dê uma olhada nas estruturas INPUT e MOUSEINPUT também.

  • Amei 1
Postado

@Lucca Rodrigues    isso não tem nenhuma finalidade , apenas para estudos mesmo ,  e tem om programa aberto e rodando com a janela reduzida , e com esse programa ao executa-lo e daria um clique com o botão esquerdo , simulando que alguém tivesse pressionado fisicamente mesmo o botão esquerdo do mouse , e como coloquei a ponta da setinha posicionada em cima  botão minimizar do outro programa , aí ao executar ele daria esse clique como se tivesse realmente pressionado o botão esquerdo do mouse e o outro programa seria minimizado .  e testei esse código mas não compilou . disse que o INPUT não foi declarado .

  • Curtir 1
Postado

@devair1010 Você pode sintetizar movimentos e cliques do mouse e pressionamentos de teclas com SendInput(), acredito que não precisa de nenhuma outra função para tal.

 

44 minutos atrás, devair1010 disse:

testei esse código mas não compilou . disse que o INPUT não foi declarado

O que usou pra testar?

  • Curtir 1
Postado

@Lucca Rodrigues    Olá ,   e me desculpe ,  você tem razão o problema é a IDE mesmo , no codeblocks não funcionou , mas no visuaL studio deu certo , obrigado ,   e será que você pode me ajudar mais uma vez ?  ,  estou com essa outra parte do programa que quero fazer , de pegar a cor de um pixel que está nas coordenadas

x = 980;
y = 253;

  da tela , estou usando esse código aqui que funciona , mas se você tiver um com menos linhas e que funcione seria bom , obrigado desde já  ..

#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#define H GetStdHandle(STD_OUTPUT_HANDLE)
/*
    no codeblocks coloque esse -lgdi32 em
    settings/compiler / linker settings/ other linker options
*/
void gotoxy(int x, int y){
    COORD c;
    c.X = x;
    c.Y = y;
    SetConsoleCursorPosition( H,c );
}
int main(){
    POINT p;
    HDC tela = GetDC(0);
    while( ! GetAsyncKeyState( VK_INSERT ) ){
        GetCursorPos( &p );
        COLORREF    clrf  ;
        tela  = GetDC(0)  ;
        clrf  = GetPixel(tela,p.x,p.y);
        int r = GetRValue(clrf);
        int g = GetGValue(clrf);
        int b = GetBValue(clrf);
        gotoxy(0,5);
        printf("/* Pressione insert para parar */\n\n"    );
        printf("Quantidade de vermeelho ====> %d   \n"  ,r);
        printf("Quantidade de verde ========> %d   \n"  ,g);
        printf("Quantidade de azul =========> %d   \n\n",b);
        printf("posicao X da tela ==========> %d   \n",p.x);
        printf("posicao Y da tela ==========> %d   \n",p.y);
        Sleep(150);
    }
    ReleaseDC(0,tela);
    return 0;
}

 

  • Curtir 1
Postado

@devair1010

16 minutos atrás, devair1010 disse:

você tem razão o problema é a IDE mesmo , no codeblocks não funcionou , mas no visuaL studio deu certo

O problema pode ser o compilador que está usando atualmente no IDE, as opções de compilação, etc. O IDE em si não faz diferença.

Prefiro usar SendInput() à ter que chamar uma função pra sintetizar cada evento separadamente, como essas que você havia mostrado: keybd_event(), mouse_event(), etc. Aliás, na documentação já é dito:

image.png.fcd83bc85c980a46692a984e55bbf752.png

 

36 minutos atrás, devair1010 disse:

estou com essa outra parte do programa que quero fazer , de pegar a cor de um pixel que está nas coordenadas da tela , estou usando esse código aqui que funciona , mas se você tiver um com menos linhas e que funcione seria bom

Não tenho nada a sugerir... A função GetPixel() retorna um COLORREF, e para extrair os valores individuais dos componentes vermelho, verde e azul, são usadas as macros GetRValue, GetGValue e GetBValue.

E bem, foi basicamente isso que você fez :)

  • Amei 1

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...