irfanview的右键拖拽图片和鼠标手势冲突,可以改成左键么
通常软件都是左键,这个软件是右键
irfanview的右键拖拽图片和鼠标手势冲突,可以改成左键么
通常软件都是左键,这个软件是右键
有以下方法:
#IfWinActive ahk_class IrfanView
; 左键按下时,先记录时间
~LButton::
MouseGetPos, startX, startY
drag := false
SetTimer, WatchDrag, 10
return
~LButton Up::
SetTimer, WatchDrag, Off
if (drag) {
SendEvent {RButton Up} ; 如果是拖动,松开右键
return ; 阻止左键的点击动作
}
return
WatchDrag:
if GetKeyState("LButton", "P") {
MouseGetPos, curX, curY
if (Abs(curX - startX) > 3 || Abs(curY - startY) > 3) {
if (!drag) {
drag := true
SendEvent {RButton Down} ; 模拟开始右键拖拽
}
}
}
return
#IfWinActive
感谢提供思路,我试了下,可用,但是我发现左键是选区用的,所以我也问了ai改成双键同时按下拖动模拟右键拖动。这样三圈七妹了。右键鼠标手势,左键选区,双键拖动
#IfWinActive ahk_class IrfanView
; 监控左键按下
~LButton::
CheckBothButtons()
return
; 监控右键按下
~RButton::
CheckBothButtons()
return
; 监控左键松开
~LButton Up::
StopDragEmulation()
return
; 监控右键松开
~RButton Up::
StopDragEmulation()
return
; 检查是否同时按下了左右键
CheckBothButtons() {
global startX, startY, drag, emulating
; 如果尚未开始模拟且同时按下了左右键
if (!emulating && GetKeyState("LButton", "P") && GetKeyState("RButton", "P")) {
MouseGetPos, startX, startY
drag := false
emulating := false
SetTimer, WatchDrag, 10
}
}
; 停止拖动模拟
StopDragEmulation() {
global drag, emulating
SetTimer, WatchDrag, Off
if (emulating) {
SendEvent {RButton Up} ; 松开模拟的右键
emulating := false
}
drag := false
}
; 监控拖动行为
WatchDrag:
global startX, startY, drag, emulating
; 检查是否仍同时按下左右键
if GetKeyState("LButton", "P") && GetKeyState("RButton", "P") {
MouseGetPos, curX, curY
; 检查鼠标移动是否超过阈值
if (Abs(curX - startX) > 3 || Abs(curY - startY) > 3) {
if (!drag) {
drag := true
emulating := true
SendEvent {RButton Down} ; 开始模拟右键拖动
}
}
} else {
; 如果不再同时按下左右键,停止监控
StopDragEmulation()
}
return
#IfWinActive
ai写的双键拖动模拟右键拖动
我直接在鼠标手势工具(WGestures)那设置“停留超时”为半秒,也就是按住右键不动半秒就不触发鼠标手势。遇到要右键拖曳操作时就先按住不动等半秒再拖。