有没有可以替代 Razer Synapse 并具有完整宏功能的鼠标?

有没有可以替代 Razer Synapse 并具有完整宏功能的鼠标?

我对 Razer Synapse 的使用体验非常糟糕,因为它会导致我的电脑不断随机出现 BSOD。我对其中一个宏按钮使用了灵敏度离合器,但当 Synapse 服务未运行时,灵敏度离合器无法正常工作。我尝试了 X-Mouse Button Control,但它不支持其他按钮。有没有办法在不安装 Synapse 的情况下获得完整的宏功能?

答案1

我所做的是暂时地安装 Synapse 为鼠标创建板载配置文件。我将 7 个宏键分别分配给 F13-F19,并将其保存到鼠标。现在,当我按下宏按钮时,它会触发相应的功能键之一。

然后,为了处理宏,我使用 AutoHotKey。我运行了一个简单的脚本来处理和重新映射功能键。如果你想像我一样使用灵敏度离合器,有人制作了一个很棒的脚本在 AutoHotKey 论坛上这正是我需要的。

我根据自己的目的对其进行了修改,使它充当离合器而不是拨动开关:


;=================================================================================
NormalMouseSpeed    := true ; State of Mouse pointer speed
UserMouseSpeed    := 0  ; Speed sensed before slow down
MouseThreshold1  := 6
MouseThreshold2  := 10
MouseEnhance        := 1
;Set this to true if you need to debug (or just want to show tooltips)
ShowTooltips        := false

SPI_GETMOUSESPEED   := 0x70
SPI_SETMOUSESPEED   := 0x71
SPI_SETMOUSE        := 0x04 

;=================================================================================

*F18::
throttleMouseSpeed(1)
return

*F18 UP::
unThrottleMouseSpeed()
return

;=================================================================================
throttleMouseSpeed(SlowMouseSpeed) {
    global
    if (NormalMouseSpeed) {
        ; SENSE BEFORE
        DllCall("SystemParametersInfo", UInt,SPI_GETMOUSESPEED, UInt,0, UIntP,prevSpeed, UInt,0)

        ; Temporarily reduces the mouse cursor's speed.
        ; Retrieve the current speed so that it can be restored later
        DllCall("SystemParametersInfo", UInt,SPI_GETMOUSESPEED, UInt,0, UIntP,UserMouseSpeed, UInt,0)
        ; Slow down mouse speed
        DllCall("SystemParametersInfo", UInt,SPI_SETMOUSESPEED, UInt,0, UInt,SlowMouseSpeed, UInt,0)

        ; SENSE AFTER
        DllCall("SystemParametersInfo", UInt,SPI_GETMOUSESPEED, UInt,0, UIntP,currentSpeed, UInt,0)
        
        if (ShowTooltips) {
            ToolTip, Mouse slow: %currentSpeed%/20
            SetTimer, RemoveToolTip, 1000
        }

        ; REMEMBER CURRENT STATE
        NormalMouseSpeed := false
    }
}

unThrottleMouseSpeed(){
    global
    ; SENSE BEFORE
    DllCall("SystemParametersInfo", UInt,SPI_GETMOUSESPEED, UInt,0, UIntP,prevSpeed, UInt,0)

    ; Restore the original speed.
    DllCall("SystemParametersInfo", UInt, SPI_SETMOUSESPEED, UInt,0, UInt,UserMouseSpeed, UInt,0)

    ; Restore the original speed acceleration thresholds and speed
    VarSetCapacity(MySet, 32, 0) 
    InsertInteger(MouseThreshold1, MySet, 0)
    InsertInteger(MouseThreshold2, MySet, 4)
    InsertInteger(MouseEnhance   , MySet, 8)
    DllCall("SystemParametersInfo", UInt,SPI_SETMOUSE, UInt,0, Str,MySet, UInt,1) 

    ; SENSE AFTER
    DllCall("SystemParametersInfo", UInt,SPI_GETMOUSESPEED, UInt,0, UIntP,currentSpeed, UInt,0)
    
    if (ShowTooltips) {
        ToolTip, Mouse restored: %currentSpeed%/20
        SetTimer, RemoveToolTip, 1000
    }
    ; REMEMBER CURRENT STATE
    NormalMouseSpeed := true
}

相关内容