link (e seus clones) fornecem esse recurso. você deseja usar especialmente o " Clique em " -Command:
Clicks a mouse button at the specified coordinates. It can also hold down a mouse button, turn the mouse wheel, or move the mouse.
Gostaria de poder ligar algumas teclas aos cliques do mouse feitos em locais específicos. Por exemplo: quando eu pressiono F1, eu devo clicar com o botão esquerdo do mouse nas coordenadas 300x350, F2 em 600x350 e assim por diante. Ainda melhor se isso puder ser vinculado a um aplicativo de janela específico, de modo que as coordenadas possam ser relativas a ele, em vez do desktop de base.
Existe um software que permite isso?
ADIÇÃO:
Ok, o autohotkey é ótimo, mas tenho problemas com minha configuração específica. Citando meu comentário abaixo:
I'm using it with an old game (championship manager 01/02) which runs in windowed mode (and I have to set win98 compatibility for it to run): I can get the mouse to move but no click goes to the application
Eu li esta FAQ mas não ajudou, este é o script que eu tentei:
SendMode Play
SetKeyDelay, 0, 50, Play
F1::Click 42, 191
F2::ControlSend ahk_class main, Click, Championship Manager 01/02
Ainda sem sorte: o ponteiro se move, mas nenhum clique passa.
SendMode Play
SetKeyDelay, 0, 0, Play
F1::Click 42, 131
F2::ControlSend ahk_class main, Click, Championship Manager 01/02
return
As coordenadas são relativas à janela ativa por padrão, mas você também pode defini-la especificamente. Você pode usar comandos diferentes para atingir o comportamento específico do aplicativo desejado. No seu caso, eu recomendaria a versão #
de IfWinActive
; isso faz com que as teclas de atalho existam apenas para a janela de destino e simplifica o código.
Você confirmou que está acessando a janela correta? A barra de título do programa realmente diz exatamente
Championship Manager 01/02
? Tente um teste com um script simples para verificar:
#IfWinActive, Championship Manager 01/02
F1::MsgBox Yup; correct window.
#IfWinActive
Por padrão, é necessário corresponder exatamente o texto da barra de título da janela de segmentação, mas você pode usar um modo de correspondência diferente:
SetTitleMatchMode, 1 ; Match the start of the Window’s titlebar ; easier but more false-matches
e.g.: Championship Manager matches
SetTitleMatchMode, 2 ; Match any part of the titlebar; easiest but most false-matches
e.g.: ship Man matches
SetTitleMatchMode, 3 ; Match the titlebar of the Window exactly; most restrictive but fewer false-matches
e.g.: Championship Manager 01/02 matches
Existem várias maneiras de emular um clique do mouse. Experimente cada um até encontrar um que funcione para o seu programa. Você pode especificar o modo para o comando
Click
e o comando genérico Send
(que é o padrão Event ), ou você pode especificar o modo explicitamente ( Play é recomendado para programas e jogos difíceis):
Send Click 42,191 ; defaults to Event
SendPlay Click 42,191
SendInput Click 42,191
SendEvent Click 42,191
SendMode Input
Send Click 42,191 ; uses Input mode
SendMode Play
Send Click 42,191 ; uses Play mode
SendMode Event
Send Click 42,191 ; back to Event mode
Em vez de enviar um clique do mouse, você pode tentar enviar um botão esquerdo do mouse, mas primeiro você precisa mover o cursor manualmente:
MouseMove 42,191,0 ; Immediately move the cursor relative to the active window
Send LButton ; Left-click
Quanto ao
ControlSend
, observe que ele diz especificamente:
Unlike the Send command, mouse clicks cannot be sent by ControlSend. Use ControlClick for that.
ControlClick
não é realmente destinado ao envio de cliques para uma janela de nível superior, por isso você teria que identificar o (s) controle (s) e isso pressupõe que o jogo até usa controles reais.
Tente o seguinte e altere o
SendMode
, se necessário (particularmente tente Reproduzir )
CoordMode, Mouse, Relative ; Explicitly set mouse coords to relative
SetTitleMatchMode, 1 ; Match start of titlebar (e.g., Foobar*)
SendMode Event ; Use Event mode (try Input and Play)
#IfWinActive, Championship Manager ; Only make hotkeys for specified window
F1::Click 42, 191 ; Send a mouse-click (left-click)
F2::Click 558, 191 ; …
#IfWinActive ; Reset conditional block