Help Topic is solved

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

Moderator: Gio

rodrigoramon
Posts: 2
Joined: 31 Aug 2020, 20:43

Help

31 Aug 2020, 20:47

Boa noite!
tenho um problema com esse scrip, quando aperto Shift ou Ctrl o script para de funcionar,
estou um pouco perdido, só queria que o Shift e Ctrl não parassem o script, alguém pode me ajudar!?

Code: Select all

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
 
; iloveesl
NRA := 1
 
; SS
^!p::Suspend
 
; NR
~LButton::
while GetKeyState("LButton") & NRA
{
DllCall("mouse_event", uint, 1, int, 0, int, 2, uint, 0, int, 0)
Sleep, 9
DllCall("mouse_event", uint, 1, int, 0, int, 2, uint, 0, int, 0)
Sleep, 3
}
return
 
; Nades
~MButton::
if GetKeyState("LButton")
{
NRA := 0
Sleep, 1000
MouseClick, Left,,,,, U
NRA := 1
}
return
 
Insert::ExitApp
User avatar
Gio
Posts: 1060
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Help  Topic is solved

01 Sep 2020, 09:26

Bom dia Rodrigoramon.

Seja bem-vindo ao fórum da comunidade do AutoHotkey.

Shift e Control são consideradas teclas modificativas. Isso significa que elas trabalham modificando o sinal que o seu teclado envia ao sistema operacional através do driver. Portanto, se você deseja que uma hotkey seja executada neste caso também, você deve criar OUTRA hotkey indicando que opere através do shift+click. O mesmo vale para o control.

:arrow: Por sorte, criar uma outra hotkey que faça a mesma coisa que outra é muito fácil no AutoHotkey, pois você só precisa colocar o nome de uma em cima da outra (já que a execução vai pular para lá quando qualquer uma das duas for chamada).

Exemplo (no exemplo abaixo, a hotkey do botão do mouse será acionada independente de segurar o control ou o shift, pois criamos hotkeys para essas chamadas e as colocamos logo antes do nome da hotkey do clique comum):

Code: Select all

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
 
; iloveesl
NRA := 1
 
; SS
 ^!p::Suspend
Return

A::
DllCall("mouse_event", uint, 1, int, 0, int, 2, uint, 0, int, 0)
Sleep, 9
DllCall("mouse_event", uint, 1, int, 0, int, 2, uint, 0, int, 0)
Sleep, 3
Return


; NR
~+LButton::
~^LButton::
~LButton::
while GetKeyState("LButton") & NRA
{
DllCall("mouse_event", uint, 1, int, 0, int, 2, uint, 0, int, 0)
Sleep, 9
DllCall("mouse_event", uint, 1, int, 0, int, 2, uint, 0, int, 0)
Sleep, 3
}
return
 
 
; Nades
~+MButton::
~^MButton::
~MButton::
if GetKeyState("LButton")
{
NRA := 0
Sleep, 1000
MouseClick, Left,,,,, U
NRA := 1
}
return

 
Insert::ExitApp

OBS: caso seu script faça uso das variáveis embutidas ou outras funcionalidades que operam sobre o nome da hotkey chamada por último (por exemplo, usando a variável embutida A_ThisHotkey), você deve estar atento para o fato de que o valor da variável mudará dependendo de com quais botões o usuário chamou a hotkey (e isto poderia alterar o resultado de condicionais atrelada a estas variáveis, por exemplo).

Espero ter ajudado, se ainda tiver alguma dúvida, basta postar abaixo :thumbup:
rodrigoramon
Posts: 2
Joined: 31 Aug 2020, 20:43

Re: Help

01 Sep 2020, 13:18

Gio wrote:
01 Sep 2020, 09:26
Bom dia Rodrigoramon.

Seja bem-vindo ao fórum da comunidade do AutoHotkey.

Shift e Control são consideradas teclas modificativas. Isso significa que elas trabalham modificando o sinal que o seu teclado envia ao sistema operacional através do driver. Portanto, se você deseja que uma hotkey seja executada neste caso também, você deve criar OUTRA hotkey indicando que opere através do shift+click. O mesmo vale para o control.

:arrow: Por sorte, criar uma outra hotkey que faça a mesma coisa que outra é muito fácil no AutoHotkey, pois você só precisa colocar o nome de uma em cima da outra (já que a execução vai pular para lá quando qualquer uma das duas for chamada).

Exemplo (no exemplo abaixo, a hotkey do botão do mouse será acionada independente de segurar o control ou o shift, pois criamos hotkeys para essas chamadas e as colocamos logo antes do nome da hotkey do clique comum):

Code: Select all

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
 
; iloveesl
NRA := 1
 
; SS
 ^!p::Suspend
Return

A::
DllCall("mouse_event", uint, 1, int, 0, int, 2, uint, 0, int, 0)
Sleep, 9
DllCall("mouse_event", uint, 1, int, 0, int, 2, uint, 0, int, 0)
Sleep, 3
Return


; NR
~+LButton::
~^LButton::
~LButton::
while GetKeyState("LButton") & NRA
{
DllCall("mouse_event", uint, 1, int, 0, int, 2, uint, 0, int, 0)
Sleep, 9
DllCall("mouse_event", uint, 1, int, 0, int, 2, uint, 0, int, 0)
Sleep, 3
}
return
 
 
; Nades
~+MButton::
~^MButton::
~MButton::
if GetKeyState("LButton")
{
NRA := 0
Sleep, 1000
MouseClick, Left,,,,, U
NRA := 1
}
return

 
Insert::ExitApp

OBS: caso seu script faça uso das variáveis embutidas ou outras funcionalidades que operam sobre o nome da hotkey chamada por último (por exemplo, usando a variável embutida A_ThisHotkey), você deve estar atento para o fato de que o valor da variável mudará dependendo de com quais botões o usuário chamou a hotkey (e isto poderia alterar o resultado de condicionais atrelada a estas variáveis, por exemplo).

Espero ter ajudado, se ainda tiver alguma dúvida, basta postar abaixo :thumbup:

de fato, eu havia me esquecido disso e foi uma excelente observação, ctrl e shift são alteradores e
também teria que ter colocado o macro referente a essas duas teclas também, muito obrigado, e ao conhecimento também!

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 2 guests