Sobre MouseMove Topic is solved

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

User avatar
Hologram
Posts: 126
Joined: 06 May 2020, 16:47

Sobre MouseMove

11 Jun 2020, 18:45

Boa Noite comunidade!

Eu to precisando fazer um script em que uso o MouseMove em um determinada janela, o problema é que dentro dessa janela o mouse é substituido por um icone (ou outro tipo de ponteiro.. não sei) de uma mãozinha amarela.. e acaba acarretando no mal funcionamento do MouseMove, testei o mesmo script fora do jogo e tava funcionando legal

Base:

Code: Select all

F11::

ImageSearch, PosX, PosY, 0, 0, %A_ScreenWidth%, %A_ScreenHeight%, %A_ScriptDir%/colheita.png
If (ErrorLevel = 0)
{
	X_pra_esquerda := PosX + 0 
	Y_pra_baixo := PosY + 0 
	MouseMove, %X_pra_esquerda%, %Y_pra_baixo% 
	Send, {LButton}
	Sleep, 50
	Mouseclick
}

Será que tem alguma maneira de resolver o problema ou em 2 alternativa eu dar um imagesearch ou pixelcolor nessa Maozinha, e conseguir movimentar ela na tela atraves disso?
User avatar
Gio
Posts: 1059
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Sobre MouseMove

12 Jun 2020, 17:22

Boa tarde Hologram.

O que está havendo com o MouseMove dentro do programa alvo?

Ele move o mouse pra um lugar muito longe do esperado?
Ele move o mouse pra um lugar próximo, porém diferente?
Ele não move o mouse de forma alguma?

E como você chegou à conclusão de que o problema estaria no cursor que o programa alvo usa?

:arrow: DICA: Alguns programas não registram movimentos muito rápidos do mouse. Se for este o caso, basta usar o parâmetro Speed do comando MouseMove para reduzir a velocidade do movimento.
User avatar
Hologram
Posts: 126
Joined: 06 May 2020, 16:47

Re: Sobre MouseMove

12 Jun 2020, 17:52

Boa noite @Gio

Alternativa C: Ele não move o mouse de forma alguma

E eu cheguei nessa conclusão pq fiz uma engenharia reversa no jogo, procurei por algo que não deixasse o mouse funcinar e não tinha nada.. só achei um processo em Mutand que fazia aparecer aquela mãozinha.. eu desliguei ele, mas o mouse normal não tinha eficacia dentro da janela, é como se eu nem estivesse clicando, fiquei meio sem entender nada no fim kk
Discord: Npc Bugado#9074



local config = {
delrey = getPlayerCarValue(cid, DELREY),
cigarro = getPlayerCancer(cid, DERBY),
prostituta = getPlayerAIDS(cid, cracuda),
tresOitao = getPlayerRevorvi(cid, 38)
}
if(delrey == "Ligado" and cigarro == "Aceso" and prostituta == "No Colo" and tresOitao == "Carregado") then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Começou o fim de semana. #PAS")
end


User avatar
Gio
Posts: 1059
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Sobre MouseMove  Topic is solved

16 Jun 2020, 13:48

Bom dia Hologram.

Bom, muitas vezes não temos como saber o porquê de uma rotina não estar funcionando como deveria. Nesses casos você pode tentar estudar o programa alvo para saber qual barreira está enfrentando ou então simplesmente tentar usar outros métodos de fazer a mesma coisa (workarounds) e ver se algum deles funciona. A segunda opção costuma ser a melhor, pois não envolve muito estudo do programa alvo.

No caso do MouseMove, você pode por exemplo tentar mexer na configuração Speed, pois como eu disse, às vezes o programa alvo ignora (ou não simplesmente não entende) movimentos muito rápidos do mouse. Mas se isso não funcionar de nenhuma forma, você pode por exemplo enviar sinais de movimento de mouse diretamente para a janela do jogo e ver quantos/quais fazem o mouse se mexer. Isso pode ser feito com o comando SendMessage/PostMessage.

:arrow: Os sinais de teclas e mouse funcionam no computador da seguinte forma: o Windows (Sistema Operacional) recebe os impulsos elétricos do hardware (mouse/teclado) e os traduz em sinais através de um programa de baixo nível chamado driver. Quando ele recebe esses sinais traduzidos, ele os gerencia, interpretando alguns globalmente (como control + alt + del) e reenviando os outros para a janela atualmente ativa através de uma fila (buffer) de mensagens (Cada janela tem o seu próprio buffer). Esta fila de mensagens que a janela recebeu pode então ser acessada pelos programas para realizar ações condicionadas às mensagens recebidas. Esta é a forma padrão pela qual os programas do windows recebem sinais do teclado/mouse.

Assim, os comandos SendMessage/PostMessage permitem que você envie um sinal diretamente ao buffer da janela alvo. Dessa forma, você pode controlar exatamente o que está enviando para a janela alvo (ou seja, controle total sobre o tipo, conteúdo e quantidade dos sinais). Dessa forma, ao usar o SendMessage/PostMessage, fazemos aquela velha troca entre facilidade de implementação e possibilidades de configuração (neste caso: mais possibilidades e menos facilidade).

PostMessage/SendMessage é considerado um comando um pouco mais avançado, mas existe um tutorial antigo no YouTube em 3 vídeos que pode te ajudar a usá-lo. Você pode ver o primeiro vídeo aqui (infelizmente o tutorial está em inglês, mas você pode ver ele escrevendo os códigos e usando um aplicativo que identificar as mensagens em tempo real - dicas valiosas para entender como as mensagens funcionam).

Existe também a possibilidade de o programa alvo estar implementando um hook para olhar os sinais do teclado/mouse mais diretamente no driver (ao invés de usar o buffer da janela). Se for este o caso, pode ser bem mais difícil simular o movimento para o programa alvo (talvez tivesse que manipular o hardware ou criar um driver customizado, ou então usar um mouse programável - tem alguns modelos por aí). Mas como sempre, isso também é possível (seria apenas mais trabalhoso). Em último caso, apenas para explicar "tudo", também poderia ser feito hackeando o Windows ou as suas DLLs caso fosse realmente necessário (não recomendo isso é claro).

Qualquer que seja a via adotada, será sempre tentativa e erro, com o conhecimento te ajudando a criar as ideias certas :beer:

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: TheProdigyC2 and 3 guests