I have two monitors with the non-primary monitor (number 1) set to the main one's (number 2) top left like this:

I'll repeat: number 2 is the primary monitor.
Here's the code:
Cursor.Position = new Point(-500, -500);
What happens is that when the cursor is initially in the primary monitor (number 2), after the code is executed, the cursor moves to monitor number 1, to a location 500 pixels up from its bottom, but to its far right. Here:

Instead of here:

After running the above code twice, like so:
Cursor.Position = new Point(-500, -500);
Cursor.Position = new Point(-500, -500);
It gets to the correct place.
The problem is that this code seems like a hack and I'd like to avoid it, and get the cursor to the correct place in a "correct" way.
So how do I achieve that?
When you have more than one screen then you have to be careful about Bounds of each screen
C# provide an array of Screens and you can loop through that array to get more information about screen coordinates i.e. Screen.AllScreens

See the image bellow which demonstrate that only primary screen start from X:0 and Y:0 in 2D(X,Y) plane, we can adjust second screen anywhere, in my case it is has position (-1366,305) as shown. and different points ar
Each Screen has its bound from Left To Right and From Top to Bottom. You can use that bounds to go to exact position like shown in code I can move to any Point of any screen if I add its Bounds'value to Point.
//To move on First Screen use its Bounds
Cursor.Position = new Point(300 + Screen.AllScreens[0].Bounds.Left, 300 + Screen.AllScreens[0].Bounds.Top);
//To move on Second Screen use its Bounds
Cursor.Position = new Point(300 + Screen.AllScreens[1].Bounds.Left, 300 + Screen.AllScreens[1].Bounds.Top);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With