У меня открыты браузеры в этой конфигурации на рабочем столе:

схема дисплея

Есть ли способ одновременно нажимать красные кнопки?

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

Но предоставленный скрипт слишком сложен для меня, чтобы изменить его, если есть способ просто сместить мои координаты клика от первоначального клика, чтобы получить желаемый результат?

2 ответа2

2

Возможно, есть более элегантные способы сделать это, но вот полуручный способ, которым вы могли бы воспользоваться.

Во-первых, установите ваши окна на место.

Как только они будут в положении и готовы к использованию, выясните, какие будут смещения для отправки им вторичных кликов.

Вот фрагмент кода, который вычислит смещение положения, переместив вашу мышь в места, которые вы хотите "измерить" и нажав F1 и F2.

#Persistent
#SingleInstance, Force
#NoEnv

F1::
    CoordMode, Mouse, Screen
    MouseGetPos, firstX, firstY
    Gosub ShowTooltip
Return

F2::
    CoordMode, Mouse, Screen
    MouseGetPos, secondX, secondY
    Gosub ShowTooltip
Return 

F3::ToolTip     ; Clear setup tooltip

ShowToolTip:
    ToolTip % msg:="1stX, 1stY `t= " firstX ", " firstY "`t`t (set with F1, where you will click in operation)`n" 
    . "2ndX, 2ndY `t= " secondX ", " secondY "`t`t (set with F2, where you want it mirrored to)`n"
    . "offsetN[X, Y] `t= [" secondX-firstX ", " secondY-firstY "] `t`t hard code this once windows are in position"
Return

В вашем случае с 5 дополнительными окнами перейдите в позицию, которую вы хотите синхронизировать в первом окне, и нажмите F1, затем переместите мышь в позицию во втором окне и нажмите F2. Подсказка покажет разницу между ними в виде смещения [X, Y]. Запишите его, затем перейдите к следующему окну и снова нажмите F2. Если вы случайно очистили или изменили F1 (firstX/firstY), убедитесь и всегда устанавливайте F1 в окне, где будет происходить первоначальный щелчок. Просто установите его один раз, затем вычислите вторичные точки для каждого окна, используя F2, пока не будут записаны все смещения.

(Альтернативные способы сделать это - обнаружить окна, переместить их в нужное место, изменить их размер и т.д. Это просто тупой / простой способ в том, что касается кодирования, за счет небольшой работы по настройке каждый раз, когда вы хотите его использовать.)

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

После записи ваших смещений в каждое из вторичных окон обновите их в жестко закодированном разделе определения списка смещений [X, Y]. Если у вас больше или меньше 5 дополнительных окон, уменьшите или добавьте пары смещений, используя аналогичные обозначения с номером пары смещений, следующим сразу за смещением слова, т. offset13:=[X,Y] , а также соответствующим образом обновите счетчик maxDup , т.е. , maxDup:=13

#Persistent
#SingleInstance, Force
#NoEnv

~LButton::      ; tilde allows the LButton click to pass through and not get blocked
    CoordMode, Mouse, Screen
    MouseGetPos, mouseX, mouseY
    dupClicks(mouseX, mouseY)        ; duplicate clicks using mouse position as input
Return

dupClicks(mouseX, mouseY) {

    ; hard-code offsets to the windows you want to click
    ; there are other ways of detecting windows and clicking
    ; at a relative offset within each window (regardless of where it is at),
    ; but the original post doesn't have enough information to show something
    ; fancy like that

    Offset1:=[300, 0]
    Offset2:=[500, 0]
    Offset3:=[100, 200]
    Offset4:=[300, 200]
    Offset5:=[500, 200]

    maxDup := 5          ; set to number of extra windows defined above to be clicked

    Loop, % maxDup {
        x:=mouseX+offset%A_Index%[1]    ; get first value of OffsetN, i.e., xOffset
        y:=mouseY+offset%A_Index%[2]    ; get second value of OffsetN, i.e., yOffset
        Click, %x%, %y%
    }
}

После того как смещения установлены, запустите скрипт, чтобы проверить его. Если вы хотите проверить меньшее количество смещений, закомментируйте дополнительные строки смещений и измените maxDup для соответствия.

Что-то еще, что вы можете захотеть сделать для более простого тестирования, может также сделать условное обозначение LButton:: hotkey, то есть использовать #IfWinActive ahk_exe chrome.exe или аналогичный (в зависимости от вашего браузера) и поместить его в качестве строки, непосредственно предшествующей LButton:: строка определения горячей клавиши. Это предотвратит повторное нажатие мыши на других программах, кроме вашего браузера, если окно браузера не было активным до того, как вы нажали на него.

1

При использовании AutoHotkey следующий скрипт будет нажимать красные области вашего экрана один за другим при нажатии Win+F11 :

#F11::
;Clicks the X, Y pixel with a 10 ms delay between each click
Click 427, 289
Click 1049, 289
Click 1675, 289
Click 427, 805
Click 1049, 805
Click 1675, 805
Return

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .