none
Mover o Mouse na Posicao X e Y em outro Processo. RRS feed

  • Pergunta

  • olá, gostaria de mover o mouse em outro aplicativo com um click em uma textBox1: vou dar um exemplo só q nao da certo.

    internal const int WM_MOUSEMOVE = 0x200;


            [DllImport("User32.dll")]
            public static extern Int32 FindWindow(String lpClassName, String lpWindowName);

            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int SendMessage(int hWnd, int msg, int wParam, IntPtr lParam);

    private void button1_Click(object sender, EventArgs e)
            {
                int hwnd = FindWindow(null, "outroprocesso.exe");

                int PosX = 300;
                int PosY = 300;

                SendMessage((int)hwnd, WM_MOUSEMOVE, PosX, IntPtr.Zero);
                SendMessage((int)hwnd, WM_MOUSEMOVE, PosY, IntPtr.Zero);
            }

    então... essa forma ai, ele envia o mouse para meu outro processo sim, mas a posição fica como se fosse 0,0, fica na esquerda do  no topo, é como se a PosX = 300; e a  PosY = 300; não tivesse efeito nenhum! e eu gostaria de por na posição 300!!!
    o que estou fazendo errado? não é tão dificil . eu apenas estou aprendendo ainda.
    OBS: eu sei fazer o mouse se mexer em qualquer posição, mas nao dentro de outro aplicativo. e sim no desktop.
    mas não é isso que quero. quero colocar o mouse +- no centro do outroprocesso.exe
    Agradeço se alguem me ajudar.

    segunda-feira, 27 de fevereiro de 2017 19:01

Respostas

  • Bom, se o jogo usa mesmo directx a coisa fica bem mais complicada. Creio que C# nao seja linguagem indicada para isso.

    Voce vai ter que programar em baixo nivel, usando C++ ou mesmo ASM.

    A criaçao de bots esta longe de ser trivial e eu creio que eu nao possa te ajudar muito.

    O que eu vi é que ao inves de capturar Hooks (que é o que faz o sendmessage) a comunidade criadora de Bots usa de artificios como criar um falso driver de mouse (note a complexidade da coisa) que simula um verdadeiro mouse, assim o jogo nao sabe a diferença. 

    Veja a complexidade de um driver:

    http://www.mactech.com/articles/develop/issue_04/device_driver.html

    Note que dependendo do jogo existem proteçoes contra Bots e impedem artificios como o que voce esta tentando fazer. É facil saber quando a entrada é manual de uma entrada automatica. 

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".



    quarta-feira, 1 de março de 2017 14:03
    Moderador

Todas as Respostas

  • Este "outroprocesso.exe" é executado em uma janela ou é, por exemplo, um jogo?

    Att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 28 de fevereiro de 2017 13:41
    Moderador
  • Este "outroprocesso.exe" é executado em uma janela ou é, por exemplo, um jogo?

    Att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    é uma janela Aplication2.exe posso colocar qualquer nome"
    quero que o meu Aplicativo1.exe coloque o mouse no centro do Aplication2.exe
    nao quero mover nem clicar, somente posicionar naquele quadrado o mouse no meio! ou em determinado x,y sem eu ter que movimentar meu mouse.
    eu fiz aqui um , mas ele movimenta o meu mouse e joga para onde eu quero.
    mas eu quero que seja somente dentro do Aplication2.exe sem interferir no meu mouse.

    [DllImport("user32.dll")]       

    static extern bool SetCursorPos(int X, int Y);int PosX = Convert.ToInt32(textBox1.Text); 

             

    int PosY = Convert.ToInt32(textBox2.Text);           

    SetCursorPos(PosX, PosY);

    //no textbox eu coloco o numero referente a posição


    esse codigo mexe no mouse do windows.

    ja o codigo que passei antes não mexe no mouse do windows, só queria formular como mexer o mouse dentro de outro aplicativo.

     
    terça-feira, 28 de fevereiro de 2017 15:45
  • O problema é que alguns processos nao capturam as mensagens do Windows, por exemplo, alguns jogos usam o DirectX para captura do mouse porque é muito mais rapido que passar pelo core do windows.

    Por isso nós precisamos saber qual é exatamente o aplicativo que voce quer passar as instruçoes.

    Att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 28 de fevereiro de 2017 15:50
    Moderador
  • errei, nao é o nome do precesso e sim o nome do título
    o titulo é  int hwnd = FindWindow(null, "teste");
    terça-feira, 28 de fevereiro de 2017 16:02
  • então, não é nenhum game é um projeto que eu mesmo criei em c#

    que eu tenho q ficar abrindo ele e apertando um botao,

    mas queria que o main que é o programa que estou focado fizesse esse trabalho de localizar o local exato de uma form
    atravez de seu titulo

    terça-feira, 28 de fevereiro de 2017 16:09
  • Neste caso o codigo que voce fez deveria funcionar... O que acontece quando voce o executa com a  Aplication2.exe Aberta?

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 28 de fevereiro de 2017 16:13
    Moderador
  • o mouse fica no TOP na esquerda. como se nao tivesse a direção
    terça-feira, 28 de fevereiro de 2017 16:19
  • me ensina a outra forma que vc disse que se fosse com DirectX é diferente, para eu testar por favor?
    terça-feira, 28 de fevereiro de 2017 16:27
  • Veja esse projeto aqui:

    https://www.codeproject.com/articles/28064/global-mouse-and-keyboard-library?fid=1518257&df=90&mpp=25&noise=3&prof=false&sort=position&view=quick&fr=51

    Eu testei aqui e funciona muito bem. Voce pode baixa-lo e analizar o codigo. Dentro da soluçao existe um gravador de macro que eu acho que é exatamente o que voce quer fazer.

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 28 de fevereiro de 2017 16:40
    Moderador
  • Obrigado. vou estudar o codigo, e ver como faço :D obrigado.
    terça-feira, 28 de fevereiro de 2017 16:56
  • não consegui mesmo!

    tem como me ajudar?

    realmente vc me pegou, quero manipular o mouse em um game :((

    quero mexer o mouse dentro do game :(

    vc pode me ajudar com isso?

    passo todas as informacoes possiveis.

    o game chama-se game ele usa directx 9

    então eu posso enviar para o game mensagens assim como textos em conversas

    mudar minhas skills que esta por exemplo no F5

    clicar com o botao direito dentro do game para ativar a skill!

    isso não corrompe o game não, é apenas TOOLS 

    eu coloco em um timer, para nao ter como esquecer de fazer suas skills

    por exemplo eu coloco 3000 segundos para ativar a skill F5

    e depois que a acabar a outra eu ativo sozinho minhas skills, por outro f4,f3,f2.. e assim vai

    eu no momento estou trabalhando para tentar mexer o mouse dentro desse game

    para um tool de seleção. o mouse tem que apontar para o local X,Y para a troca de skill especial!

    esse codigo aqui eu troco a skill por F5 e ativo, esta funcionando perfeitamente!

    mas eu realmente gostaria de manipular o mouse e colocar no ponto certo que eu gostaria.

    int hwnd = FindWindow(null, "game");

                    SendMessage((int)hwnd, WM_KEYDOWN, VK_F5, IntPtr.Zero);
                    SendMessage((int)hwnd, WM_KEYUP, VK_F5, IntPtr.Zero);
                    SendMessage((int)hwnd, WM_RBUTTONDOWN, 0, IntPtr.Zero);
                    SendMessage((int)hwnd, WM_RBUTTONUP, 0, IntPtr.Zero);

    então baseado nesse codigo correto de findwindow

    e de funcionabilidade de envio de keys, teria como fazer para envio de mouse?

    tipo




                int hwnd = FindWindow(null, "game" );

    int PosX = texBox1.Text;

    int PosY = texBox2.Text;



                SendMessage((int)hwnd, WM_MOUSEMOVE, PosX, IntPtr.Zero);
                SendMessage((int)hwnd, WM_MOUSEMOVE, PosY, IntPtr.Zero);

    esse codigo de cima é sem sucesso!

    não me bana por favor, isso não é engenharia reversa! não estou mechendo com memorias do game

    Obrigado.

    quarta-feira, 1 de março de 2017 05:15
  • Bom, se o jogo usa mesmo directx a coisa fica bem mais complicada. Creio que C# nao seja linguagem indicada para isso.

    Voce vai ter que programar em baixo nivel, usando C++ ou mesmo ASM.

    A criaçao de bots esta longe de ser trivial e eu creio que eu nao possa te ajudar muito.

    O que eu vi é que ao inves de capturar Hooks (que é o que faz o sendmessage) a comunidade criadora de Bots usa de artificios como criar um falso driver de mouse (note a complexidade da coisa) que simula um verdadeiro mouse, assim o jogo nao sabe a diferença. 

    Veja a complexidade de um driver:

    http://www.mactech.com/articles/develop/issue_04/device_driver.html

    Note que dependendo do jogo existem proteçoes contra Bots e impedem artificios como o que voce esta tentando fazer. É facil saber quando a entrada é manual de uma entrada automatica. 

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".



    quarta-feira, 1 de março de 2017 14:03
    Moderador
  • Obrigado :)

    pelo menos sei, que 'e dificil, por isso n~ao consegui rsrsrs

    mas acho que vou deixar esse projeto de lado, pois ele nao tem tanta relevancia. era apenas algo que nao tinha sentido para mim. mas com sua explicacao, eu consegui notar o sentido das falhas . obrigado mesmo .

    quinta-feira, 2 de março de 2017 14:59