Могу ли я зеркалировать /дублировать события мыши на обеих половинах экрана?

Если у меня есть два одинаковых приложения бок о бок на моем рабочем столе, существует ли там программное обеспечение, которое будет имитировать то, что я делаю в левой половине справа? В принципе, если мой экран 1000x1000, и событие щелчка происходит в 5,5, я также хотел бы, чтобы оно запустило это событие на 505,5 (зеркально отразилось на оси X). Я бы хотел подражать событиям клавиатуры и мыши.

7 голосов | спросил qJake 25 FebruaryEurope/MoscowbSat, 25 Feb 2012 00:26:47 +0400000000amSat, 25 Feb 2012 00:26:47 +040012 2012, 00:26:47

1 ответ


5

(Выбирая предварительный скрипт, который выполнял основную функцию, был так же прост, как я думал. Это заняло всего несколько минут и работало достаточно хорошо. Проблема в том, что есть много маленьких ошибок и крайних случаев, когда что-то может не работайте в каком-то конкретном случае или если существует какое-то другое конкретное ожидание. Я все еще работаю над расширенной версией скрипта, который обрабатывает двойные щелчки и перетаскивание, но, хотя есть много примеров и попыток, нет твердых, и краткие примеры обработки этих совершенно прав в это время, так что это незавершенное производство.)


В любом случае приведенный ниже сценарий представляет собой более старую версию, которую я сбросил (и немного почистил для общественного потребления). Он делает то, что было задано (и немного больше). Нет настоящего руководства; вы просто запускаете скрипт и запускаете его в режиме зеркалирования. Мышки-клики по обе стороны экрана дублируются на другой (вертикальной) половине. Существует несколько горячих клавиш, которые можно использовать для изменения поведения скрипта:

  • Alt + Shift + Q включает и выключает зеркалирование
  • Ctrl + Shift + Q включает и выключает автозапуск (быстрое повторение)
  • Ctrl + Alt + Shift + Q приостанавливает сценарий так, чтобы указатель мыши нормально работал
  • Ctrl + Alt + Shift + Win + Q завершает сценарий


Вот пример вывода скрипта:

Снимок экрана с изображением Mirror.ahk

Mirror.ahk

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;   Mirror.ahk mirrors mouse clicks on one half of the screen to the other half
; http://superuser.com/questions/393738/
;
;   (cl) 2012- Synetech inc., Alec Soroudi
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;   Hotkeys:
;       Alt+Shift+Q                     to toggle mirroring
;       Ctrl+Shift+Q                    to toggle autofire
;       Ctrl+Alt+Shift+Q            to completely pause the script (mouse behaves normally)
;       Ctrl+Alt+Shift+Win+Q    to quit
;
;       Defaults to single-click, mirrored
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#SingleInstance force
CoordMode, Mouse, Screen
SetDefaultMouseSpeed, 0
SetMouseDelay, -1
SendMode Play                                       ;Try modes Event, Input, or Play


;Variables
SysGet, MonitorWorkArea, MonitorWorkArea, %A_Index%
Half            :=  (MonitorWorkAreaRight - MonitorWorkAreaLeft) >> 1
Mirror      :=  1
Autofire    :=  0



;Main function
Dupe(action, var) {
    ;Calculate other half
    MouseGetPos, x,y
    Global Half
    if (x<Half) {
        Left := (Half + x)
    }
    else {
        Left := (x - Half)
    }

    Global Mirror
    if (action=0) {                             ;Mouse
        if (var=0) {                                ;Left-click
            if Mirror
                Click %Left% %y% Left
            Click %x% %y% Left
        }

        else if (var=1) {                       ;Right-click
            Click %Left% %y% Right
            Click %x% %y% Right
        }

        else if (var=2) {                       ;Middle-click
            Click %Left% %y% Middle
            Click %x% %y% Middle
        }

        else if (var=3) {                       ;Button4-click
            Click %Left% %y% X1
            Click %x% %y% X1
        }

        else if (var=4) {                       ;Button5-click
            Click %Left% %y% X2
            Click %x% %y% X2
        }
    }


;   else if (action=1) {                    ;Keyboard - do what???
;   }
}



;Hotkeys
!+q::                                                       ;Pause mirroring with Alt+Shift+Q
    Mirror := !Mirror
;   MsgBox  Mirror: %Mirror%
return

^+q::                                                       ;Toggle autofire with Ctrl+Shift+Q
    Autofire := !Autofire
;   MsgBox  Autofire: %Autofire%
return

^!+q::                                                  ;Pause script with Ctrl+Alt+Shift+Q
    Suspend
;   if (A_IsSuspended = 1)
;       MsgBox  Hotkeys suspended
;   else
;       MsgBox  Hotkeys resumed
return

^!+#q::                                                 ;Quit with Ctrl+Alt+Shift+Win+Q
;   MsgBox Quitting
    ExitApp
return

+#q::                                                       ;Reload/restart script with Shift+Win+Q
;   MsgBox Reloading
    Reload
return



;Handlers
*$LButton::
Loop {
;       if (Mirror)
            Dupe(0, 0)
        GetKeyState, State, LButton, P
        if (!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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ответил Synetech 28 MarpmWed, 28 Mar 2012 23:24:23 +04002012-03-28T23:24:23+04:0011 2012, 23:24:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132