Recently I bought an ergonomic mouse Logitech Trackman Marble. Mainly because I started to feel pain in my wrist and it didn’t go away over time. Probably because I spent 8+ hours per day on computer and incorrect hand positions/movement can lead to Carpal tunnel syndrome.
Trackman Marble is a great mouse. It’s symmetrical, meaning you can use it if you are left or right handed. You need couple of weeks to get used to it, but then it’s simple to use like any other mouse. I even play FPS games with no problems. The only real big downside of the mouse is, that it lacks the scrolling wheel. Logitech has provided an alternative solution for scrolling, but it’s non intuitive to use, in other words, useless.
I decided to write a small program, code name MarbleScroll, that would simulate wheel like scrolling. The main idea is scrolling with pressing the back button and turning the marble. If you don’t turn the marble, then it acts just like normal back button. After digging around I found out it can be done with capturing low level mouse events in OS. I decided to go with C#, as windows is my primary OS for workstation.
Desired MarbleScroll functionality:
- support for scrolling in all applications without modifying them
- back button + marble turn = scroll
- back button = normal back operation
- scrolling is done on application with mouse focus and without the need of clicking on application to gain focus
You can download MarbleScroll here. If you use SetPoint, you need to set Generic button as Button task for the back button (demonstration). MarbleScroll is really simple to use. You just need to run it. Place it in any folder on your hard drive and create shortcut in Startup folder for auto start at reboot. If you get an error about missing .NET framework, you can install it from here.
Few details about MarbleScroll:
- works on Windows XP, Vista, 7, 8, 8.1, 10, …
- build for .NET framework 4.5, but it should compile on any other if you choose it in project source
- compiled for right handed mouse, but it works for left handed too.
- runs in system tray where you can close it if you require to
- vertical and horizontal scrolling with back button + marble movement
- back button without marble movement produces normal back operation
- scrolls the windows under mouse pointer without focusing it
In windows we can capture low level mouse events in User32.dll with SetWindowsHookEx function (WH_MOUSE_LL). We need this to detect back button press and marble movement. For simulating a scrolling wheel we can use mouse_event function (MOUSEEVENTF_WHEEL and MOUSEEVENTF_HWHEEL).
The idea behind scrolling in non focused window under mouse pointer is to find underlying window with WindowFromPoint function and compare it to focused window from GetForegroundWindow function. If they aren’t equal, we focus the underlying window with SetForegroundWindow function. If we focus it every time, scrolling won’t work in drop-down lists. That is because drop-down list is normally a child window and we are focusing the parent window. Therefore it isn’t enough to compare foreground window and window from point, but we have to compare their root owners, which can be done with GetAncestor function.
I created a MarbleScroll.cs class for scrolling and Visual Studio project which includes MarbleScroll.cs and code for background application running in system tray. You can tweak the source code for vertical and horizontal sensitivity or for general code improvement. In second case please share the code (:
Update 30.7.2015: The app didn’t work well on Windows 10. The problem was in mouse_event() taking too much time to execute inside low level hook and windows doesn’t like that. I moved the code to another thread and it works fine now. It should work better on other versions of windows too. Code and updated app is available for download in attachments.
Update 8.2.2017: It doesn’t work with task manager or your app? Try running MarbleScroll as administrator (right click, run as administrator). MarbleScroll only works for applications run by the same user.
Update 26.5.2018: If you have problems with MarbleScroll on HiDPI display, you can right-click MarbleScroll.exe and go to Properties, Compatibility Tab and select “Override high DPI scaling behavior. Scaling performed by” and select “Application”. (credits go to Simon Lang)
or bitcoin donation: 1AZpTrJbUNHGSaXfG1AwzCxSRRTZGEJQck
thanks alot for your excellent application (windows 7). is it compible with windows 8 and 8.1 ?
Yes, it is compatible with windows 8/8.1. If you have any problems, let me know.
It’s really great solution! Thank you! And it’s working even in VisualStudio!
But how i can set it for left hand? I would like replace back and forward buttons.
I already fixed that)
Oh, no when I set Back fuction for Forward button via SetPoint it dosn’t work (
But mouse message doesn’t change!
In SetPoint you need to set Forward button to Generic button and modify source code in MarbleForm.cs. I will add WM_FORWARDBUTTON (it is missing) to the code and recompile it when I return home… in couple of hours (:
I checked and it is actually WM_XBUTTON and not WM_FORWARDBUTTON. It is the same event for back and forward button, so it should work with back and forward button without any program modification Just make sure you select Generic button in SetPoint for Forward button and it should work. If you still have any problems, let me know
Thank you very much~!! Excellent program~
but it don’t work in chrome browser
Thanks. I am using it with windows 7, 8.1 and it’s working in Chrome, Firefox and IE. There are some problems with select dropdown lists inside browsers, but I can live with that (:
Thank you! I used scroll bar in Visual Studio last year and now i’m happy!
Fantastic job!..THANK YOU!!!… I almost bought a trackball for twice the cost if I didn’t run into this nice little app!
Again thank you for the great job!
Marble TrackBall 의 Scroll 을 편리하게 – Marble Scroll App – 15000RPM
Works perfectly in Win8.1.
It doesn’t work for Windows 10.
I think I fixed it. I will upload the code/program after some testing.
I have updated the post and uploaded new app. It’s working fine now in Windows 10.
I just ran it in Windows 10 and it works like a champ.
It doesn’t work in new task manager application and likes of it. I wonder if it did before. But thanks a lot anyway.
It works perfectly with windows 10 and more importantly with all my games. Thank you so much! It’s very good app and the explanations on how to install it are clear and precise. 10/10
Thank you so much! This was driving me crazy in Windows 10 after switching from Linux.
I’ve got multiple screens (Windows 10, Surface Pro 2), it works great for my main screen, but not other screens. Any ideas?
Strange. I am also using Windows 10 and it’s working fine in all screens. It only has problems with certain apps like task manager,…
Wow this is amazing! Miles better than Logitech’s crappy Auto and Universal scroll and even better than X-Button control. Having the scroll and back/forward buttons is a stroke of genius. You’ve just turned an good mouse into a great one. Cheers!
I’ve resurrected my trackball and was really missing this function. I’m on Windows 7, and it’s working great! Thanks so much 🙂
Great work! I’ve been using MarbleScroll by Simon M and it isn’t compatible with new versions of Windows anymore.
The scrolling doesn’t work in applications like Stream. Do you think that this is something you would be interested in fixing.
Thank you very much,
Thank you sooooo much for creating this!!! As you stated, the scroll functions in SetPoint suck, I didn’t like having to toggle it on and off. Logitech really should have thought of this functionality.
I’m also really thankful that you made this to be portable, so I don’t need to contact my company’s IT department and convince them to install software!
Is there a way to change the back button to a middle click?
Try setting it in Logitech Setpoint.
I have been using this for 8 months and never had a problem, until now. It does not work online anymore. I can open a document and it works fine. Online, it simply goes back a page and does not scroll anymore. It worked on Aug. 31, 2016, but when I went online on Sep. 1, 2016, it would not scroll anymore. Did Firefox do something that is interfering with the program? I know they did an upgrade on their browser today, but how would that affect the mouse scrolling function? If I can’t find a solution, I will have to revert back to a scrolling wheel mouse to replace the marble mouse.
I have just tested the updated firefox and it’s working fine on updated Windows 10. You need to run MarbleScroll and firefox with the same user. For example, don’t run firefox as administrator and MarbleScroll as normal user.
Thank you for marblescroll. Do you accept paypal donations for it?
Yes, I accept paypal donations to firstname.lastname@example.org and bitcoin donations to 1AZpTrJbUNHGSaXfG1AwzCxSRRTZGEJQck
There’s an old MarbleScroll app — https://sites.google.com/site/marblescroll/home
It’s a little buggy, but it has configuration app and allows to setup single press of scrolling X-button as middle click.
Thank you so much I really cant live without middle button because always using it in browser.
There’s also Seelge’s TrackScroll, which less customizable (it actually lacks scroll speed setup and ability to use different buttons for scroll and middle click), but it looks like more stable than any other software.
MarbleScroll is pretty stable too. Never crashed since I can remember 🙂 Middle click was added recently and if you have any problems working with apps, just run it as administrator.
How about installing hardware variant — maybe usual mouse wheel can be connected to trackball controller?
If only we can change it’s firmware…
Go for it. And please share your results 🙂
I would like to say thank you for saving my Trackman, I was seriously considering to get rid of it without scroll. It is amazing how used I am to scrolling in documents. However I tend to use middle click a lot, reprogrammed instead of Forward. Is there any chance to create a version where I could use the Forward button as middle click and scroll?
Glad to hear it. Probably yes, I will take a look about that middle click.
That sounds great, hvala puno.
Here you go: https://www.fewprojects.com/files/marblescroll/MarbleScrollApp.zip
It should work with middle click now. I have tested it with normal mouse with middle button.
The scroll works like magic but I can not open links in browser with the middle click any more?
It should work now. I have updated the code. Redownload and report if it’s working.
Works great 🙂
Logitech, please get a clue, games don’t work with your silly “universal scroll”.
I love the idea of this because i LOVE my Logitech marble, but after installing it I find that I can scroll down in apps like Outlook and Access, but I can’t scroll back up. do you know what the problem is?
It works ok in File Explorer and on the Web but I need the other apps as well. I have installed the SetPoint and set the back button to generic.
I have no idea why you can’t scroll up. It should work if you can scroll down. Let me know if you find the problem. I am using it daily without any problems in outlook.
how can I simulate the middle click on the logitech marble trackball T-BC21? In some other forums they talk about holding both left and right click buttons. Does your app has that functionality?
Other than that the scrolling works perfect, thanks for creating it.
You can set it in SetPoint settings, but you will lose one button. If you want to simulate middle click with holding both buttons, you need to program some additional logic to the MarbleScroll application.
Thanks for the info, also do I have to do something to the logic to get the marblescroll to work on secondary monitor? it only works on my laptop screen but if I hook a secondary monitor and I use it to extend my desktop, it doesn’t work on the monitor
It should work on multiple displays without any problems as long as the MarbleScroll is run by the same user as an application you are trying to scroll. Try tunning MarbleScroll as Administrator.
You’re right, it did work on another monitor, what I had to do was add a shortcut of it to the “shell:common startup” so it will boot up as Administrator, I’m using windows 10 64-bits. On a side note, I went and bought the kensington orbit with scroll ring and didn’t like a bit, I returned it to the store. I rather keep using the logitech marble with your marblescroll script, more ergonomic to use and the back & fwd buttons work perfect along with the scrolling. Which that logitech will make it wireless. Thanks again for this script, works perfect.
I love this program, it makes this mouse a great mouse I want it to be.
However, in some programs like slack and outlook (sometimes) it recognizes the back button on press instead of on release (just guessing here) but it doesn’t let me scroll because it hits the back button before I can start trying to scroll. Any ideas?
EDIT: it seems I was wrong about slack, I meant Skype for business. Also, after a reboot Outlook and Skype seem to be working. I will let you know if things go south however.
holy crap you deserve a medal for this program. it was exactly what i was looking for. this functionality should come standard on the logitech marble. makes my workday a whole lot smoother, don’t know how i lived without it for so long!
I’m having an issue in games when using this app. The mouse wheel emulation works fine, but the back and forward buttons no longer function as they normally would just by pressing them so anything I have bound to those buttons won’t work. I’ve made sure that the game and the app are both running under the same user. Any ideas?
Games sometimes override default button behaviour, or it just simply doesn’t like additional processing done by MarbleScroll to detect scrolling. Unfortunately, I have no suggestions how to fix this for your specific game, beside to experiment with different approaches in code.
damn I was painfully scrolling before this, it’s great!
Middle click still not working (tested in Yandex and Chrome).
And there’s no ability to set different x-buttons to click and to scroll (needed for some software like Autodesk’s).
Source code is published with the program. Feel free to modify it to meet your needs and please share it afterwards.
I don’t understand how this works. I’ve extracted it and clicked on the application and nothing happens. Only thing that shows up is my marble mouse’s icon in the icons section on the bottom right and the only thing I can do with it is exit.
I have an Acer Windows 10 PC. How do I use this? Thank you.
Run the MarbleScroll application, open another application where you wish to scroll (Word, Chrome, …). Make sure there is enough content to scroll (scroll bar visible). Click and hold left mouse button (back button) and simultaneously move marble on the mouse up and down to scroll. If it doesn’t scroll, then install/open setpoint and set back button to generic button.
I opened the application and tried scrolling – this didn’t work.
However, I then opened setpoint and changed the back button to the generic button, as you said, and now it works!
I have some questions.
Can this scrolling work on editing programs like DaVinci or Final Cut Pro X?
Also, is it possible to have the application automatically turn on whenever I turn on the computer?
Thank you, Primož!
It depends on the program. Try scrolling and if it doesn’t work you can try to run MarbleScroll as an administrator and try again.
To run MarbleScroll on startup just put it in startup folder. Check on google/youtube how to do that based on you version of Windows.
Hi Primož, I am currently staring at the code to try and get the right small button to act as the scroll so I can keep the left small button as the middle mouse button. I have done some programming but I am a bit stumped with this code. I think that it has to do with this initial if statement but I can’t seem to figure it out.
if (type == MouseMessages.WM_BACKBUTTONDOWN || type == MouseMessages.WM_MBUTTONDOWN && !simulatingMiddleClick)
isScroll = true;
disableBackButton = false;
startX = hookStruct.pt.x;
startY = hookStruct.pt.y;
dx = 0;
dy = 0;
// for scrolling in window under mouse pointer
POINT p = new POINT();
p.x = startX;
p.y = startY;
IntPtr focusWindow = WindowFromPoint(p);
IntPtr foregroundWindow = GetForegroundWindow();
// only focus is window is not already focused
if (GetAncestor(foregroundWindow, 3) != GetAncestor(focusWindow, 3))
return new IntPtr(1);
Or it may be as simple as changing the value in the bottom WM_BACKBUTTONDOWN = 0x020B, but I am not sure.
Any pointers would be great.
When you are in Visual Studio just print ‘type’ to console and see what codes you get when you click down or up on buttons. Then just change WM_BACKBUTTONDOWN code, or add another variable and replace WM_BACKBUTTONDOWN.
When I put a watch on Type all I get is WM_MOUSEMOVE. I am pretty much stumped on this. I am trying to find a way to see the value of the button i press but I am totally stumped. Sorry for bothering you…Any ideas?
You can try
open console view in Visual Studio and click slowly.
is there someone who can help me?
I use a Logitech Trackball Marple FX since some years. Now in connection to a Windows 10 Pro machine over a PS/II to UBB-converter. It workes well, but there is no function of the smal red button. ;-(
MarbleScroll seems to be a very good prog, but will not help me, for the computer (Win 10) does not recognize the action of this small red button.
I tried many things, but it will not work. I think its a driver problem.
Hopely someone can give me a tip.
Thank you, Primož!
I’ve spent hours trying to cobble together solutions to this problem. I *need* my Marble Mouse to scroll reliably. ;^)
Everything I tried was only a partial solution — working in some apps but not others. Yours appears to work consistently, everywhere I need it.
This has worked flawlessly for me and I really appreciate you putting together such a great solution. Using Windows 10 and haven’t found a program that it doesn’t work with yet. Thanks again.
Thank you a lot
Using Windows 10 right now, and for some reason it doesn’t work no matter what I do. I changed it’s compatibility settings, as well as running it as administrator, and nothing happens. A program does start running though, which I can find with the task manager, but for some reason the scrolling feature never seems to kick in. The back button just does it’s original function even if I start moving the ball before I release the button.
Do you have SetPoint installed? Choose “Generic button” for back and forward buttons in SetPoint and try if it works.
I am on updated Windows 10 and MarbleScroll still works .
Do you think you can pull off something that scroll the page with “rotation” of the ball? I believe Kensington’s Slimblade is doing that; consider X axis is left/right for the mouse, Y axis is up/down, Z axis will be for scroll up/scroll down. I’m not exactly sure if we need a secondary sensor to get the Z axis rotation.
Trackman marble doesn’t have Z axis, only X and Y.
Great app, but using it disables my “forward” mapping to middle mouse button (windows 10). Is this a known issue? Thank you!
Such a shame there is no Mac version :/
Thankyou Primož for your excellent software, I use it on Windows every day, so very happy to donate to your project.
On the Mac, I use USB Overdrive to do the same thing: http://www.usboverdrive.com
This is a terrific service. I like the Logitech Marble because I’ve already had carpal release surgery, and the symptoms are returning.
I have a problem, however. While the software engages seamlessly, when I scroll using the mouse, the page moves in leaps that are much too long, skipping information on the page. I have verified this occurs in both Chrome and Word 2019
Any suggestions? I’m not a techie — be gentle!
Thanks again, and best regards
MarbleScroll only sends number of scrolls you do on the mouse. Scroll sensitivity, how much it moves the page up and down, is defined in the OS. You can set the scroll sensitivity in the SetPoint program from Logitech or in Windows mouse settings.
Hi 🙂 I have been using your program for a few years now and am currently switching to Linux. Do you know how hard it would be to port over to Linux? I am not familiar with C# but am a Computer Science student and would be willing to attempt the Linux port myself. Do you have any guidance for where to start? Is it possible to just run your code on Linux myself? When I attempted to run the exe with mono it didn’t work. It gave a fatal error “System.EntryPointNotFoundException: GetModuleHandle at(…….”
You can’t run/port MarbleScroll to linux as it uses native windows system libraries. But you can do pretty much the same with native support in linux. Try something like: https://wiki.archlinux.org/index.php/Logitech_Marble_Mouse
Excellent. Worked immediately and on windows apps as well as in a virtual network connection to a linux server. Unlike setpoint, the scrolling stops when you stop holding the “back” button.
I love you man, this is a must for a thinkpad, where the middle button can be either a 3rd button click OR scroll but not both things at once, in linux that’s the default (and obvious) behavior.
Once more, THANKS!!!
Great helper! Thank you for making this.
I have RSI in my right hand and am trying to offload the scrolling to the left hand. Pretty much like in this use case (https://superuser.com/questions/1341871/windows-10-use-a-second-mouse-just-for-scrolling). Since I already own a Marble, I’d like to try using it without buying new hardware. The AHK solution provided there seems to be an inferior version to yours.
In the two-device setup, it would be even more comfortable if the Marble movement is always scrolling, without the need to hold a button.
I’ve looked into the code but am not knowledgable enough to do this myself. The scroll modifier button converts all movement to scrolling, i.e. the primary regular mouse as well. So it’s not a simple case of keeping isScroll = true.
Is there a way to process mouse movement of a specific device?
I think that is not possible with current implementation. MarbleScroll just intercepts system events for mouse movement without any knowledge where did the event came from.
You should also take into account small non intentional mouse movements and don’t initiate scrolling.
Maybe cheapest second mouse with standard wheel?
Thanks for the response! I actually first considered using a touchpad for the left hand, but then stumpled upon that linked discussion and your tool. Just wanted give Marble a try first since it had been lying around uselessly anyway.
Hey, sorry to bug you much later about this. But in a similar situation.
Is it possible, to essentially make the button trigger a lock instead of having to hold it? Thanks.
Yes, but you have to edit the source code. I’m currently busy with projects and won’t have time for programming and testing.
Is there any way to make the program function in the opposite direction? That is, if I move the trackball down, it will scroll up?
Yes, open the project in visual studio. Search for wheel up and wheel down and switch them.
Not sure if this is the same app I used years ago but it works great on my new Marble TrackMan, old one broke a long time ago, but it works great! Logitech should include it on their site and pay you royalties! Whoever heard of any kind of pointing device with no scroll? In fact using the ball to scroll is better than a separate scroll-wheel.
Awesome solution! … but I don’t use a Back button. Is there an easy way to make Marblescroll work with a Double-click generic button???
You can change mouse buttons in Logitech SetPoint or you can edit the MarbleScroll source code and change the button number.
Brilliant! So helpful! Many thanks.
Is it possible to use the left button + marble for scroll instead of the back button? I’m not a programmer, but I can follow instructions. 🙂
Love this utility! Thank you!
Yes! Download Visual Studio Code (it’s free) and open the MarbelScroll project. Edit the file MarbleScroll.cs on lines 68 and 90. Use WM_LBUTTONDOWN and WM_LBUTTONUP (list is on line 184). Press play button in Visual Studio Code to test it.
Need a little more direction here. I downloaded MarbleScroll.zip. Which file or folder in there is the project that I should open? Or do I simple open the file MarbleScroll.cs?
Once it tests successfully, how do I save and deploy it? Right now, I’m running the standard MarbleScroll.exe upon computer startup.
Open MarbleScroll.sln in the Visual Studio Code. That should load up the whole project. Then edit MarbleScroll.cs inside Visual Studio. Press play to test it. To deploy it, search MarbleScroll folder for *.exe and copy it over standard MarbleScroll.exe. It will generate new exe after every play.
MarbleScroll.sin opens in Visual Studio Code, but it doesn’t seem to load any other files. Apparently, this little mod is above my pay grade! Thanks for trying to help.
It seems like you need Visual Studio Community to compile .NET projects. I compiled it for you for scrolling with left mouse click.
Thank you! Very nice of you to do this.
Such an elegant solution, thank you for your time on this.
This is still, by far, the best solution to a surprisingly common problem. I wanted to use scrolling within a Steam game and couldn’t find a solution that worked until now. THANK YOU
Does this app work on a mac. I purchased this mouse at the recommendation of a medical provider. When I found out it could not scroll, well you know.
No, windows only. For Linux there is a built in support for simulated scrolling, but for mac I don’t know.
You can check out Trackball M570.
It does not work as before 🙁 every time I click on a small button to scroll, it activates another window from behind (it works only when I minimize or move other windows from the back)
That’s very strange. I’m using it on latest version of win10 and it’s working fine. Check if there’s another program conflicting with MarbleScroll.
Thank you for creating this. I’ve noticed that I’m unable to scroll while hovering over another window without switching focus to that window (most of the time). The workaround is to hover the mouse over the scroll bar of the unfocused window which will allow you to scroll while hovering without switching focus. I just recently downloaded this software. Is this just part of how the program functions? If not, is there a way to make it so that you can scroll by hovering the mouse over a window without switching the focus to that window?
It focus the window at mouse pointer. It works on Chrome and may other applications, but it doesn’t work on all of them. Code for that is: SetForegroundWindow(focusWindow);
Btw, if you run application as administrator and you run MarbleScroll as user, then it won’t work. You need to run second MarbleScroll as administrator. You can try that.
Thank you so much !!! You made such a clever solution. I also had the pain on my index finger for years. I just got this mouse today and started to use your software. Thank you again.
Unbelievable, marvellous work!
Works like a DREAM!!!
Window 10 Pro, version 2004
OS build 19041.329
my Logitech Marble mouse(USB)
–> USB to PS/2 converter
–> Keyboard/Mouse to USB converter
–> My laptop USB port
Thanks a lot!
from South Korea
Is it possible to have functionality like Logitech universal scroll? i.e. you click on small back button and cursor will change in universal scroll cursor. Then leave the back button and roll the ball to scroll. Click back button again to make cursor normal and leave. Now rolling will only move mouse and no scroll.
I tried to look in code but couldn’t figure out easy way to change mouse cursor and scroll.
I know what do you mean, but I don’t know how to do that.
Thanks for the reply. I will look into this if i get time. From first try it’s not easy.
and… thanks for creating this awesome tool!
Thank you so much for this program! I just bought a Logi Trackman and immediately installed it. Works perfectly!
The program activates when either xbutton is clicked. I would like to have it only work with the xbutton1. I am not familiar enough with the syntax of C# to modify the code for this. It seems the wParam needs to be 0x0001 for the WM_XBUTTONDOWN and WM_XBUTTONUP. I don’t know how to implement this myself. If you could point me in the right direction I’d appreciate it.
DUDE YOU HAVE AWESOME SKILLS, ABILITIES AND INSIGHT! I sincerely thank you for this ingenious pieces of code. I just bought the Marble, installed it and was shocked to discover it didn’t have EXACT scrolling ability your code provides. That feature is so obvious! Why the heck hasn’t Logitech enabled it already? So weird. Oh well. THANK YOU VERY MUCH!
Hi there. This app is so good! It functions very good in all programs. But I have 2 problemas: scroll is not precise and scroll does not work in Pro tools (DAW). Please, give me a solution.
1) scroll is not precise: practice more, at least 3 months
2) scroll does not work in Pro tools (DAW): if you run your program as administrator, you can also try to run MarbeScroll.exe as administrator (right click -> run as …)
Thanks a lot! Nice job!!
Tip: if you want to use the mouse left-handed, you just assign “default button” in setpoint to the right small button and it correctly flips around.
@the author, THANK YOU for providing the source project!! I was able to tweak it to perfectly fit my muscle memory from another mouse.
If you want to have the same horizontal sensitivity but still have vertical scrolling work “as expected”, just flip the order of the blocks “// horizontal” and “//vertical” under “else if (isScroll && type == MouseMessages.WM_MOUSEMOVE)”. Then you can set the variables SENSITIVITY/DISTANCE_Y/X to the same values and still scroll down in long pages like in a web browser. My final settings were: sensitivity=1 and distance=15.
I also removed the checks for middle-click emulation, that was messing with my other mouse that uses middle-click + drag in CAD programs. Thanks again to the author!
Hello Primoz. can you please help me? Why does it scroll with the forward button pressed too? I thought it was going to scroll only with back button, I can’t drag with forward button emulating middle button this way, how do I fix it? I can’t understand it in the source code, thank you
I am currently away… will check it next week.
Alright thanks, also when I hold middle click it also enables scroll, so that’s weird. Have to use a version you posted on your contact page “no back”, that works better.
Primoz, I believe that the bug has not been tackled yet, or are you still away?
I didn’t find any solution for this. I only hold the back button to scroll and never the right button… only click.
WM_XBUTTONDOWN/WM_XBUTTONUP messages are sent for both forward and backward, hi-order word of additional parameter needs to be interpreted to distinguish the two. https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-xbuttondown
Ideally there should be a GET_XBUTTON_WPARAM macro for this but it doesn’t seem present for C#.
The HookCallback conditionals need to be modified to something like this:
if ((type == MouseMessages.WM_BACKBUTTONDOWN && ((hookStruct.mouseData >> 16) & 0xFFFF) == 0x0001)
Where 0x0001 is back button and 0x0002 is forward button. Sorry I don’t know enough C# to pretty this up.
Thank you for sharing this useful program. It works seamlessly with the Synaptic TouchStyk on HP ZBook I use at work. Being a long time Thinkpad user, I depend a lot on the Trackpoint to alleviate the wrist pain from alternating between keyboard and mouse.
Thank you for that.
I’ve been using MarbleScroll since May. Sometimes when I’m using the marble mouse the scrolling stops working. Could this be a conflict with SetPoint?
You need to set left small button to generic back button in SetPoint. Also you need to run MarbleScroll as administrator if you are running any programs as administrator and want to scroll in them.
Your solution has been working flawlessly…for the most part. I’m not sure if I’m the only one that experiences this, but scrolling works fine and all apps and windows, except those related to Windows 10 itself. For example: I cannot scroll within the Mail app in W10, or the start menu, settings windows, etc. Any idea why this might be? thanks!
Some programs do not work. Also you can try to start MarbleScroll as Administrator (right click, start as …).
Thanks for a the really useful program. Is there a way to disable the back button functionality but keep the scrolling capability in your program? I seem to hit it accidentally all the time and don’t really need it.
If you can just point me to the section in the code, I’ll try to do it myself in Visual Studio. Thanks again for the great work.
Try changing: if (disableBackButton)
To: if (true)
This will always disable back button.
Excelente! Muchas gracias por esta solución!
I found an issue that sometimes when the app is launched during login, it will not scroll and keeps the ctrl key pressed. Restarting the app seems to fix it. I am running Windows 10 and setpoint software is also set to launch with windows because I use the marble scroll left-handed.
I have never experienced this issue and I have no idea why it is doing that. I have shortcut to MarbleScroll.exe in the windows startup folder in start menu and it is running without any problems.
I have fixed a few issues related to high sensitivity, and changed the scroll event handling a bit to account for mouse acceleration.
Is it okay if I publish my changes on GitHub? (with proper attribution, of course)
If so, do you have a preferred license for the project?
Great! Yes, you can publish it to github with MIT license.
Thanks Primoz. I had the same hand problem as you, and use the trackball left handed. Definitely worth that cup of coffee donation.
Thank you for making the source code available and after checking it out, very happy with what you’ve done. You ROCK!!!!!!
Works with windows 11 and VS 2019.
THANK YOU THANK YOU THANK YOU!!!
Thank you sir!
I could not get the SetPoint Universal Scroll or auto-scroll to work right and could not find any place to give demo of how they should work.
I found your info from https://support.logi.com/hc/en-us/community/posts/360032525274-Universal-Scroll-does-not-work-in-Word-2013
I’m on Win10 pro and my other Microsoft “groovy” mouse (looks like it’s from the 60s) scroll wheel sticks, so until I have the time to fix it I revived my Trackman Marble and your software gave me back scroll.
If I set the small right-side button to “generic” it doesn’t do “back”. I actually want it to do “paste”, but if I pick paste it doesn’t scroll any more.
Hello! I have been using a Marble Mouse for many years and have lately been finding that I just could not do without a scroll wheel any longer for some situations. I am very grateful that you have provided this solution!
May I humbly request a binary with the Back button functionality disabled? I think the Back button on my Marble Mouse has degraded somewhat mechanically and I keep triggering the Back event accidentally when I intend to scroll.
You can set this in Logitech SetPoint program. For back button choose “Other” and then “Do nothing”. Is this working?
I have it set to “Generic Button”. If it is set to anything other than “Generic Button”, then Marble Scroll seems to stop working.
Try one of these:
I can’t test it right now and won’t be able to for another month.
Thank you so much for your efforts! I really appreciate your responsiveness. (And please excuse me for not replying more quickly.)
I tried the second version (MarbleScroll.no.back.zip) and it seems to work perfectly. 🙂
Thank you for such a great program! In some ways this elevates the Marble Mouse to become better than a mouse with a scroll wheel: it scrolls in both directions AND with inertia!
Some people asked about the middle click before, but I don’t know if there was a conclusion: I need to be able to hold the middle mouse button down and move the mouse without scrolling. Is this possible? I understood that the scrolling only happens when the “generic” buttons are used.
Sorry, I have no idea if this will work. I don’t use the middle button as mouse doesn’t have one.
Another user here, thank you so much for creating this application. I use the trackman marble at home and at work (programmer too!) and really rely on this app.
I actually want to report some odd behavior I am seeing in case you have any ideas. I’m not sure if it is a bug with MarbleScroll, or with Windows, or another app that I use. So, inconsistently/randomly/sometimes, when I press and hold the back button to start scrolling while using Firefox, Windows immediately shifts focus to another Firefox window. Insanely annoying. Googling this issue doesn’t bring up much, it’s way too specific… anyone have ideas on why this could happen, and not consistently? Thanks. I can follow up with other info if needed. I do think it might be something wrong with Firefox, but can’t imagine how/why the mouse messages are being interpreted so weirdly.
MarbleScroll focus the window under the mouse pointer. If you hover over the window and scroll, it will focus that window. This is required, otherwise you would need to click to focus window and then scroll.
You can search MarbleScroll.cs for “focusWindow” and remove the code.
Hi, thanks for responding. That is actually not my problem, what I am observing is if I have a window that is active/focused and I am also hovering over it, if I hold the back button to start scrolling, it immediately focuses a random different window (not active, not hovering over it). After more testing it seems it’s not just Firefox, it will focus the windows of other apps I use. This only happens on my work pc and not my home pc, so I doubt it is MarbleScroll’s fault and maybe something to do with my pc/environment. Again it does not do it every time, it’s inconsistent, sometimes it works perfectly. I just can’t image what the problem is. Very weird. Any possibility it could be related to the fact that I use two 4K screens?
Sorry to bother again but I think I may have an idea on why this happens. Does MarbleScroll not take into account the “Change the size of text, apps, and other items” option in WIndows Display settings? I have mine set to 150% for my 4K screens, but when i set it to 100%, I no longer see the problem I was talking about. Maybe worth a test?