解决无滚轮轨迹球的问题?

解决无滚轮轨迹球的问题?

我正在考虑买一个轨迹球,我的选择是 Logitech trackman marble。但后来我发现它没有滚轮。你如何解决这个问题?我一定要买一个带滚轮的轨迹球吗?我使用 Facebook 时经常滚动。

我不想用食指和中指点击,所以有些轨迹球鼠标对我来说不起作用,比如 Trackman Wheel。

答案1

如果您使用的是 Windows,我建议您尝试使用 AutoHotKey,其他用户已经解决了使用 Marble Mouse 滚动的问题(我使用了底部的脚本):

http://www.autohotkey.com/board/topic/4677-wheel-button-emulation-script/

Logitech 驱动程序附带的解决方案很奇怪:单击一次可启用 4 向滚动,再次单击可禁用它。您无法按住并滚动,而这正是我想要的。我最终卸载了他们的软件。

答案2

有一个简单的 100 行 C++ 替代方案,与 AutoHotKey 解决方案非常相似,即

  • 按住某个 X 按钮并移动轨迹球,即可发送垂直/水平滚轮事件;
  • 按下并释放 X 按钮时单击鼠标中键而不移动轨迹球。

https://github.com/Seelge/TrackballScroll

编辑:较新的版本提供了系统托盘图标,适用于 Windows 10 并且基于 C#。

答案3

我有同样的轨迹球,解决方案非常优雅:当您单击所选按钮时,球本身就变成了滚轮。我选择了用小指按下的右大按钮。

这是非常方便,只需几天就可以习惯。

您很快就会认为任何滚轮(鼠标或轨迹球上的)都是无法使用的。相信我,这是值得的 ;-)

优点:

  • 2D 滚动取代 1D
  • 比滚轮滚动更快、更精确
  • 更适合长滚动(得益于球的惯性)。非常适合您的 Facebook 示例。

我已经无法没有它了。

在任何 Linux 操作系统下配置它并不难。它只需要你创建一个 /etc/X11/xorg.conf 文件(请参阅此处的配置:在 Linux 下配置轨迹球,无需编辑 Xorg.conf

更多详情可在这找到:https://help.ubuntu.com/community/Logitech_Marblemouse_USB

在 Windows 上,我没有经验,但我认为轨迹球附带一个配置工具。

答案4

这是我使用的 AutoHotKey 脚本。按住左侧小按钮并上下滚动球即可滚动。但是单击左侧小按钮仍可返回。它也可以左右滚动,但对我来说太敏感了,所以这里注释掉了(以 开头的块;timesX := Abs(movedx) / 4)。

我找到了原始版本 http://www.autohotkey.com/board/topic/30816-simulate-scroll-wheel-using-right-mouse-button/。我以 anotherperson8923 的身份在那里发布了我的版本。

$*XButton1::
Hotkey, $*XButton1 Up, XButton1up, off
;KeyWait, XButton1, T0.4
;If ErrorLevel = 1
;{
   Hotkey, $*XButton1 Up, XButton1up, on
   MouseGetPos, ox, oy
   SetTimer, WatchTheMouse, 5
   movedx := 0
   movedy := 0
   pixelsMoved := 0
;   TrayTip, Scrolling started, Emulating scroll wheel
;}
;Else
;   Send {XButton1}
return

XButton1up:
Hotkey, $*XButton1 Up, XButton1up, off
SetTimer, WatchTheMouse, off
;TrayTip
If (pixelsMoved = 0)
{
    ;The mouse was not moved, send the click event
    ; (May want to make it PGUP or something)
    Send {XButton1}
    Send {XButton1Up}
}
return

WatchTheMouse:
MouseGetPos, nx, ny
movedx := movedx+nx-ox
movedy := movedy+ny-oy

pixelsMoved := pixelsMoved + Abs(nx-ox) + Abs(ny-oy)

;timesX := Abs(movedx) / 4
;ControlGetFocus, control, A
;Loop, %timesX%
;{
;    If (movedx > 0)
;    {
;        SendMessage, 0x114, 1, 0, %control%, A ; 0x114 is WM_HSCROLL
;        movedx := movedx - 4
;    }
;    Else
;    {
;        SendMessage, 0x114, 0, 0, %control%, A ; 0x114 is WM_HSCROLL
;        movedx := movedx + 4
;    }
;}

timesY := Abs(movedy) / 4
Loop, %timesY%
{
    If (movedy > 0)
    {
        Click WheelDown
        movedy := movedy - 4
    }
    Else
    {
        Click WheelUp
        movedy := movedy + 4
    }
}   

MouseMove ox, oy
return

相关内容