(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:
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;