Code Monkey home page Code Monkey logo

mouseunsnag's Introduction

MouseUnSnag

On a Windows system with multiple monitors, allow the mouse to move freely and not get stuck on corners or edges.

Getting Started

This is a relatively simple, one-file, command-line C# program that solves the problem of the mouse getting "stuck" on corners and edges when moving between multiple monitors on a Windows system.

You can download and run this project's "released" executable RELEASE LINK, or click on "release" in the GitHub GUI above.

If you like, you may instead compile the program at the command line. It requires at least version 7 of the C# compiler, and an up to date .NET Framework SDK and targeting pack. You can install these with Visual Studio Installer). Make sure to select ".NET Framework x.y.z SDK" and ".NET Framework x.y.z targeting pack" under individual components.

This will install the C# compiler, which you can access using the "Developer Command Prompt" n the start menu. You can then run the following command in the source repository's root directory to build the solution:

MSBuild MouseUnSnag.sln

The executable is build in the bin (debug) by default. You can run the program by just typing the name of the executable, .\bin\Debug\MouseUnSnag. That's it!!

What does it do?

The program endeavors to fix two separate problems related to multiple monitors, which were brought up in a couple of superuser.com posts. The respective authors also provided nice graphical representations of the problems.

  1. Mouse gets stuck on corners. This is an intentional feature of Windows, to keep the mouse from "sliding off" the corner of the monitor when you are trying to get to the task bar at the bottom of the screen. But if you find it annoying rather than helpful, MouseUnSnag will fix it for you.

    How to disable sticky corners in Windows 10 - superuser.com

  2. Mouse gets stuck on an edge, where one monitor is taller than the adjacent monitor.

    How to make the mouse wrap from corners when moving between monitors? - superuser.com

  3. MouseUnSnag also wraps the cursor around from the right edge of the rightmost monitor, to the left edge of the leftmost monitor, and vice versa. (I don't have a fancy graphic for that one!)

Configuration

MouseUnSnag can be configured in two ways: by using command line options or by selecting options in system tray icon's context menu. Options selected in the context menu are persisted to %APPDATA%/MouseUnSnag/config.txt. Options specified on the command line override option in the configuration file but are not persisted. The configuration file is only created if options are changed using the context menu, so MouseUnSnag is stateless if only command line options are used.

The configuration file consists of a list of "name:value" statements, each on their own line (extra whitespace within a line is ignored). For example:

Wrap   :false
Jump   :false
Unstick:true

MouseUnSnag takes the following command line options in the format: MouseUnSnag.exe [options ...]. All options are enabled by default.

  • -s, +s

    Disable or enable respectively unsticking the cursor from sticky corners.

  • -j, +j

    Disable or enable respectively jumping the cursor from an edge to the adjacent monitor.

  • -w, +w

    Disable or enable respectively wrapping the cursor from one far edge to the other.

How does it do it?

MouseUnSnag uses the low-level Win32 WH_MOUSE_LL callback to monitor the user's intended movement of the mouse. It also monitors the current position of the cursor on the screen. When MouseUnSnag detects that the mouse has tried to move beyond the edge/corner of the screen, but the cursor was not able to move, then it knows that the cursor is "stuck", and will attempt to sensibly move the cursor to an adjacent monitor, if one exists.

Future Directions

Although I believe this is quite a useful program, it is obviously not very "user friendly". It just runs at the command line (you must "minimize" the CMD console window, to get it out of the way), and prints out some debugging information on the console as you move the mouse around. If more than three or four people actually wind up using the program, and there is interest, it may be worth investing some effort towards some improvements, such as:

  • Allow more complex options for removing cursor "stickiness" only on particular edges or corners.

mouseunsnag's People

Contributors

grantmoyer avatar drewnoakes avatar dale-roberts avatar patricknelson avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.