Usuário com melhor resposta
Mover o Mouse na Posicao X e Y em outro Processo.

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")]
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern Int32 FindWindow(String lpClassName, String lpWindowName);
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.
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".
- Editado William John Adam TrindadeModerator quinta-feira, 2 de março de 2017 15:09
- Sugerido como Resposta William John Adam TrindadeModerator quinta-feira, 2 de março de 2017 15:10
- Marcado como Resposta William John Adam TrindadeModerator sexta-feira, 3 de março de 2017 13:43
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". -
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.
-
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". -
-
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 -
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". -
-
-
Veja esse projeto aqui:
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.
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". -
-
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.
-
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".
- Editado William John Adam TrindadeModerator quinta-feira, 2 de março de 2017 15:09
- Sugerido como Resposta William John Adam TrindadeModerator quinta-feira, 2 de março de 2017 15:10
- Marcado como Resposta William John Adam TrindadeModerator sexta-feira, 3 de março de 2017 13:43
-
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 .