Posso espelhar / duplicar eventos do mouse nas duas metades da minha tela?

7

Se eu tiver dois aplicativos idênticos lado a lado na minha área de trabalho, existe um software que imite o que eu faço na metade esquerda à direita? Basicamente, se a minha tela for 1000x1000 e um evento de clique acontecer a 5,5, eu também gostaria de disparar esse evento em 505,5 (espelhado no eixo X). Gostaria de imitar os eventos de teclado e mouse.

    
por qJake 24.02.2012 / 21:26

1 resposta

5

(Derrubar um roteiro preliminar que fazia a função básica era tão fácil quanto eu pensava. Demorou apenas alguns minutos e funcionou razoavelmente bem. O problema é que há muitas pequenas dicas e casos extremos em que algo pode não funciona em alguma circunstância específica ou se existir alguma outra expectativa específica.Eu ainda estou trabalhando em uma versão aprimorada do script que lida com cliques duplos e arrastando, mas enquanto há muitos exemplos e tentativas, não há nenhum sólido, efetivo, e exemplos concisos de como lidar com esses problemas neste momento, então é um trabalho em andamento.)


Em qualquer caso, o script abaixo é uma versão mais antiga que eu joguei junto (e limpei um pouco para consumo público). Faz o que foi pedido (e um pouco mais). Não há manual real; você acabou de executar o script e ele inicia no modo de espelhamento. Cliques do mouse em ambos os lados da tela são duplicados na outra metade (vertical). Existem algumas teclas de atalho que podem ser usadas para modificar o comportamento do script:

  • Alt + Shift + Q ativa e desativa o espelhamento
  • Ctrl + Shift + Q liga e desliga o autofire (repetição rápida)
  • Ctrl + Alt + Shift + Q pausa o script para que o mouse se comporte normalmente
  • Ctrl + Alt + Shift + Win + Q sai do script


Aqui está um exemplo de saída do script:

Mirror.ahk

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Mirror.ahkmirrorsmouseclicksononehalfofthescreentotheotherhalf;http://superuser.com/questions/393738/;;(cl)2012-Synetechinc.,AlecSoroudi;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Hotkeys:;Alt+Shift+Qtotogglemirroring;Ctrl+Shift+Qtotoggleautofire;Ctrl+Alt+Shift+Qtocompletelypausethescript(mousebehavesnormally);Ctrl+Alt+Shift+Win+Qtoquit;;Defaultstosingle-click,mirrored;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#SingleInstanceforceCoordMode,Mouse,ScreenSetDefaultMouseSpeed,0SetMouseDelay,-1SendModePlay;TrymodesEvent,Input,orPlay;VariablesSysGet,MonitorWorkArea,MonitorWorkArea,%A_Index%Half:=(MonitorWorkAreaRight-MonitorWorkAreaLeft)>>1Mirror:=1Autofire:=0;MainfunctionDupe(action,var){;CalculateotherhalfMouseGetPos,x,yGlobalHalfif(x<Half){Left:=(Half+x)}else{Left:=(x-Half)}GlobalMirrorif(action=0){;Mouseif(var=0){;Left-clickifMirrorClick%Left%%y%LeftClick%x%%y%Left}elseif(var=1){;Right-clickClick%Left%%y%RightClick%x%%y%Right}elseif(var=2){;Middle-clickClick%Left%%y%MiddleClick%x%%y%Middle}elseif(var=3){;Button4-clickClick%Left%%y%X1Click%x%%y%X1}elseif(var=4){;Button5-clickClick%Left%%y%X2Click%x%%y%X2}};elseif(action=1){;Keyboard-dowhat???;}};Hotkeys!+q::;PausemirroringwithAlt+Shift+QMirror:=!Mirror;MsgBoxMirror:%Mirror%return^+q::;ToggleautofirewithCtrl+Shift+QAutofire:=!Autofire;MsgBoxAutofire:%Autofire%return^!+q::;PausescriptwithCtrl+Alt+Shift+QSuspend;if(A_IsSuspended=1);MsgBoxHotkeyssuspended;else;MsgBoxHotkeysresumedreturn^!+#q::;QuitwithCtrl+Alt+Shift+Win+Q;MsgBoxQuittingExitAppreturn+#q::;Reload/restartscriptwithShift+Win+Q;MsgBoxReloadingReloadreturn;Handlers*$LButton::Loop{;if(Mirror)Dupe(0,0)GetKeyState,State,LButton,Pif(!Autofire||State="U")
            Break
}
return

*$RButton::
Loop {
        if (Mirror)
            Dupe(0, 1)
        GetKeyState, State, RButton, P
        if (!Autofire || State = "U")
            Break
}
return

*$MButton::
Loop {
        if (Mirror)
            Dupe(0, 2)
        GetKeyState, State, MButton, P
        if (!Autofire || State = "U")
            Break
}
return

*$XButton1::
Loop {
        if (Mirror)
            Dupe(0, 3)
        GetKeyState, State, XButton1, P
        if (!Autofire || State = "U")
            Break
}
return

*$XButton2::
Loop {
        if (Mirror)
            Dupe(0, 4)
        GetKeyState, State, XButton2, P
        if (!Autofire || State = "U")
            Break
}
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
por 28.03.2012 / 21:24