Ir ao conteúdo
  • Cadastre-se

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


devair1010
Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

           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);
}

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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!