Como faço para criar retângulos, triângulos, retas aonde o ponteiro não pode transitar?
Agradeço a atenção!
Barreiras na tela
Moderator: Gio
Re: Barreiras na tela
Boa tarde LuanMTS.
Você tem feito várias perguntas semelhantes a esta. Está tentando criar um labirinto para o mouse ou coisa do tipo?
Não conheço nenhuma uma função específica para criar uma área inacessível ao mouse em "qualquer forma que você possa imaginar", mas sei que você pode criar um hook no mouse e movê-lo imediatamente sempre que o mesmo adentrar a "área proibida". O efeito é praticamente o mesmo.
Exemplo: No código abaixo, ao pressionar F2, o script cria uma área entre as coordenadas XY 500,200 e XY 900,600 onde o mouse será expulso sempre que adentrar. Com o F3 você pode então desativar a área restrita e com o F4 fechar o script.
Apesar de a área do exemplo acima ser retangular, você pode utilizar a matemática para tornar a área restrita em qualquer outra forma que você quiser (só tem que descobrir a fórmula certa para testar se o mouse está ou não está na área). Você pode encontrar um exemplo de área proibida em formato de circulo que o usuário Nextron criou neste post. Quanto às retas, elas são retângulos de 1 linha só, e quanto aos triângulos, eu deixo para você mesmo desvendar a fórmula matemática para saber se o ponto do mouse está lá dentro e então agir expulsando-o.
Você tem feito várias perguntas semelhantes a esta. Está tentando criar um labirinto para o mouse ou coisa do tipo?
Não conheço nenhuma uma função específica para criar uma área inacessível ao mouse em "qualquer forma que você possa imaginar", mas sei que você pode criar um hook no mouse e movê-lo imediatamente sempre que o mesmo adentrar a "área proibida". O efeito é praticamente o mesmo.
Exemplo: No código abaixo, ao pressionar F2, o script cria uma área entre as coordenadas XY 500,200 e XY 900,600 onde o mouse será expulso sempre que adentrar. Com o F3 você pode então desativar a área restrita e com o F4 fechar o script.
Code: Select all
F2::
SetBatchLines, -1
hHookMouse := DllCall("SetWindowsHookEx", "int", 14, "Uint", RegisterCallback("Prender_Mouse_Fora_Da_Area", "Fast"), "Uint", 0, "Uint", 0)
Return
F3::
DllCall("UnhookWindowsHookEx", "Uint", hHookMouse)
return
F4::
ExitApp
Return
Prender_Mouse_Fora_Da_Area(nCode, wParam, lParam)
{
Critical
if !nCode && (wParam = 0x200) ; 0x200 = mensagem WM_MOUSEMOVE
{
NOVO_X := NumGet(lParam+0, 0, "Int")
NOVO_Y := NumGet(lParam+0, 4, "Int")
If (((NOVO_X >= 500) AND (NOVO_X <= 900)) AND ((NOVO_Y >= 200) AND (NOVO_Y <= 600)))
{
If ((NOVO_X >= 500) AND (NOVO_X < 520))
{
DllCall("SetCursorPos", "Int", 499, "Int", NOVO_Y)
}
Else if ((NOVO_X > 880) AND NOVO_X <= 900)
{
DllCall("SetCursorPos", "Int", 901, "Int", NOVO_Y)
}
Else If ((NOVO_Y >= 200) AND (NOVO_Y < 220))
{
DllCall("SetCursorPos", "Int", NOVO_X, "Int", 199)
}
Else if ((NOVO_Y > 580) AND (NOVO_Y <= 600))
{
DllCall("SetCursorPos", "Int", NOVO_X, "Int", 601)
}
Return 1
}
else
{
Return DllCall("CallNextHookEx", "Uint", 0, "int", nCode, "Uint", wParam, "Uint", lParam)
}
}
}
return
Apesar de a área do exemplo acima ser retangular, você pode utilizar a matemática para tornar a área restrita em qualquer outra forma que você quiser (só tem que descobrir a fórmula certa para testar se o mouse está ou não está na área). Você pode encontrar um exemplo de área proibida em formato de circulo que o usuário Nextron criou neste post. Quanto às retas, elas são retângulos de 1 linha só, e quanto aos triângulos, eu deixo para você mesmo desvendar a fórmula matemática para saber se o ponto do mouse está lá dentro e então agir expulsando-o.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Return to “Ajuda e Suporte Geral”
Who is online
Users browsing this forum: No registered users and 28 guests