Simulando cliques do mouse em coordenadas de tela específicas

6

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.

    
por Matteo Riva 03.07.2010 / 09:58

3 respostas

1

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.
    
por 03.07.2010 / 10:28
2
SendMode Play
SetKeyDelay, 0, 0, Play

F1::Click 42, 131
F2::ControlSend ahk_class main, Click, Championship Manager 01/02
return
    
por 18.09.2012 / 23:10
0

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
    
por 19.09.2012 / 00:34