3

I have a trackball (Logitech Trackman Marble in this case, though this could apply to any mouse or pointing device) where I would like to use one of the buttons as a middle-click when I click it, but to trigger scrolling action when I hold it down and move the ball around.

I could do this quite easily in Linux by setting scroll-modifier in the X config, but the driver that comes with the trackball (Logitech) only allows one or the other. Is there any way to set this up in Windows 8?

askvictor
  • 1,658
  • 4
  • 21
  • 36

5 Answers5

5

X-Mouse button control should work. http://www.highrez.co.uk/downloads/XMouseButtonControl.htm You just need to set one of the buttons to "Change movement to scroll". The way it works with my mouse is I hold the button, then moving the mouse scrolls the page instead of moving the pointer. It should work the same way for a trackball.

ChrisN
  • 1,049
  • 1
  • 9
  • 21
  • While this lets me set the scrolling action when I hold the button down (which the logitech software also lets me do), I still want the button to register as a middle-click when I click it momentarily - I can't find a way to get both of these happening in Windows like I can in Linux – askvictor Nov 11 '12 at 21:57
  • You can write custom actions for each button using X-Mouse, but I'm not sure if it could entirely replicate what you are looking for... – Usta Nov 13 '12 at 04:14
  • Looks like it's not possible at the moment to do both... the author of X-Mouse says he may implement this in the future... – askvictor Nov 13 '12 at 21:45
  • Within many others, including official drivers, that is the best solution, which works in sublime text and does not displace pointer – dy_ Sep 22 '16 at 16:24
2

Marble Mouse Wheel

Marble Scroll

Similar executable, different location:

Dave Jarvis
  • 3,168
  • 5
  • 32
  • 37
  • This seems to do what I want, but doesn't reliably work for me on windows 8.1 64 bit :( I've tried different compatibility settings, with not luck – askvictor Jul 31 '14 at 00:56
0

App: https://www.fewprojects.com/files/marblescroll/MarbleScrollApp.zip

Functionality:

  • back/forward button + marble turn = scroll
  • back/forward button = normal back/forward operation
  • scrolling is done on application with mouse focus and without the need of clicking on application to gain focus

Details: https://www.fewprojects.com/marblescroll-for-logitech-trackman-marble/

banderlog013
  • 121
  • 3
0

I just installed this on Windows 10 and it's working great: https://github.com/Seelge/TrackballScroll

Logitech TrackMan Marble trackball

user53251
  • 461
  • 4
  • 4
0

I just got a Logitech Marble mouse and also had the problem of scrolling. So I have made this script on AutoHotKey. The left Xbutton enables scrolling, meaning that while down you can scroll vertically and horizontally with the ball, and move forward and backwards in the browser with the left and right buttons. The right Xbutton has the same action as the middle button.

Im on windows 7.

#SINGLEINSTANCE FORCE  
GLOBAL status := "basic"
GLOBAL cnt_x
GLOBAL cnt_y

XButton2::MButton

$*XButton1::
    status := "scroll"
    cnt_x := 0
    cnt_y := 0
    MOUSEGETPOS, st_x, st_y
    SETTIMER, _scroll, 30
RETURN

$*XButton1 UP::
    status := "basic"
    SETTIMER, _scroll, OFF
RETURN

_scroll:
    MOUSEGETPOS, cur_x, cur_y
    MOUSEMOVE, st_x, st_y

IF(abs(cur_x-st_x) > abs(cur_y-st_y)) {
    cnt_x := cnt_x + (cur_x-st_x)
    ControlGetFocus, control, A 
    IF (cnt_x > 7) {
        cnt := floor(cnt_x / 8)
        LOOP, %cnt% {
            SendMessage, 0x114, 0, 0, %control%, A
        }
        cnt_x := cnt_x - 8*floor(cnt_x / 8)
    } ELSE IF (cnt_x < -7) {
        cnt := -ceil(cnt_x / 8)
        LOOP, %cnt% {
            SendMessage, 0x114, 1, 0, %control%, A
        }
        cnt_x := cnt_x - 8*ceil(cnt_x / 8)
    }
} ELSE {
    IF (cur_y >= st_y) {
        cnt_y := cnt_y + (cur_y-st_y)**1.2
    } ELSE {
        cnt_y := cnt_y -(st_y-cur_y)**1.2
    }   
    IF (cnt_y > 7) {
        cnt := floor(cnt_y / 8)
        LOOP, %cnt% {
            CLICK WheelUp
        }
        cnt_y := cnt_y - 8*floor(cnt_y / 8)
    } ELSE IF (cnt_y < -7) {
        cnt := -ceil(cnt_y / 8)
        LOOP, %cnt% {
            CLICK WheelDown
        }
        cnt_y := cnt_y - 8*ceil(cnt_y / 8)
    }
}   
RETURN

$*LButton::
    IF (status = "basic") {
        CLICK DOWN Left
    } ELSE IF (status = "scroll") {
        SEND {Browser_Back}
    }
RETURN

$*LButton UP::
    IF (status = "basic") {
        CLICK UP Left
    }
RETURN

$*RButton::
    IF (status = "basic") {
        CLICK DOWN Right
    } ELSE IF (status = "scroll") {
        SEND {Browser_Forward}
    }
RETURN

$*RButton UP::
    IF (status = "basic") {
        CLICK UP Right
    }
RETURN