Irfanview的右键拖拽图片和鼠标手势冲突,可以改成左键么

irfanview的右键拖拽图片和鼠标手势冲突,可以改成左键么

通常软件都是左键,这个软件是右键

有以下方法:

  1. 添加irfanview进入手势软件的黑名单,就是使用irfanview时不使用鼠标手势
  2. 鼠标手势起始按键更换成其他按键。
  3. 使用AHK写一个脚本,在irfanview这个软件里面时,将左键拖动变成右键拖动,而左键点击不受影响。(以下为AI生成代码,测试ok)
#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改成双键同时按下拖动模拟右键拖动。这样三圈七妹了。右键鼠标手势,左键选区,双键拖动

1 个赞
#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)那设置“停留超时”为半秒,也就是按住右键不动半秒就不触发鼠标手势。遇到要右键拖曳操作时就先按住不动等半秒再拖。