Tôi có thể phản chiếu / sao chép các sự kiện chuột trên cả hai nửa màn hình của mình không?


7

Nếu tôi có hai ứng dụng giống hệt nhau trên máy tính để bàn của mình, có phần mềm nào tồn tại sẽ bắt chước những gì tôi làm ở nửa bên trái ở bên phải không? Về cơ bản, nếu màn hình của tôi là 1000x1000 và một sự kiện nhấp xảy ra ở mức 5,5, tôi cũng muốn nó kích hoạt sự kiện đó ở mức 50,5 (được nhân đôi trên trục X). Tôi muốn mô phỏng các sự kiện bàn phím và chuột.


Bạn đã bao giờ thực sự sử dụng một chiếc gương và tìm ra cách chúng hoạt động?
Baarn

1
Được rồi, ít gương hơn và nhiều hơn một bản sao. Khái niệm là như nhau, toán học chỉ là khác nhau.
qJake

Hệ điều hành nào?
iglvzx

2
{Trong giọng nói phát thanh viên siêu anh hùng} Điều này nghe có vẻ như là một công việc cho Autohotkey !
Synetech

1
@SpikeX, tôi đã ném một cái gì đó cùng nhau đêm qua, nhân đôi số lần nhấp chuột trên cả hai nửa màn hình, nhưng tôi không chắc về yêu cầu cụ thể của bạn. Bạn chỉ cần một lần nhấp để được nhân đôi hoặc bạn cần kéo thực tế (giữ nút xuống và di chuyển chuột để được nhân đôi ở cả hai bên)? Tôi đã loại, làm việc đó hiệu quả, nhưng nó nói lắp và lộn xộn. Ngoài ra, tôi không chắc ý của bạn về các sự kiện bàn phím. Nhấp chuột được gửi đến bất kỳ cửa sổ nào nằm dưới con trỏ tại điểm, nhưng các phím không có tọa độ màn hình được liên kết với chúng.
Synetech

Câu trả lời:


5

(Loại bỏ một kịch bản sơ bộ đã thực hiện chức năng cơ bản dễ như tôi nghĩ. Chỉ mất vài phút và hoạt động khá tốt. Vấn đề là có rất nhiều vấn đề nhỏ và các trường hợp cạnh có thể không hoạt động Một số trường hợp cụ thể hoặc nếu một số kỳ vọng cụ thể khác tồn tại. Tôi vẫn đang làm việc với một phiên bản nâng cao của tập lệnh xử lý các lần nhấp và kéo hai lần, nhưng trong khi có rất nhiều ví dụ và cố gắng, không có ví dụ chắc chắn, hiệu quả và ngắn gọn xử lý những điều này hoàn toàn đúng vào thời điểm này, vì vậy đây là một công việc đang tiến triển.)


Trong mọi trường hợp, kịch bản dưới đây là phiên bản cũ hơn mà tôi đã cùng nhau (và dọn dẹp một chút cho tiêu dùng công cộng). Nó làm những gì đã được hỏi (và một chút nữa). Không có hướng dẫn thực sự; bạn chỉ cần chạy tập lệnh và nó khởi động ở chế độ phản chiếu. Nhấp chuột ở hai bên của màn hình được nhân đôi ở nửa kia (dọc). Có một vài phím nóng có thể được sử dụng để sửa đổi hành vi tập lệnh:

  • Alt+Shift+Q bật và tắt gương
  • Ctrl+Shift+Q bật và tắt tự động (lặp lại nhanh)
  • Ctrl+Alt+Shift+Q tạm dừng tập lệnh để chuột hoạt động bình thường
  • Ctrl+Alt+Shift+Win+Q thoát khỏi kịch bản


Đây là một đầu ra mẫu của tập lệnh:

Ảnh chụp màn hình của đầu ra 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

bạn có thể cho biết sự khác biệt giữa tự động và không tự động không?
Ooker

1
Khi tự động bật, nó sẽ tiếp tục vẽ các chấm trong khi bạn giữ nút chuột. Khi tắt, bạn phải nhấp vào nút chuột cho mỗi dấu chấm.
Synetech

Làm thế nào để tôi làm cho nó hoạt động Tôi đã thử nó nhưng nó sẽ không nhấp
Kewin Bjork Nielsen

Cũng đã thử điều này trên Windows 10 - không có sự kiện nhấp nào được kích hoạt nữa trong khi tập lệnh đang chạy. Bất kỳ ý tưởng, những gì để thay đổi trong kịch bản?
DivineTraube
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.