rs82uk
rs82uk

Reputation: 739

C# Mouse Move and Click relative to active window

Hi I have been using code similar to this in a piece of automation I have been working on

public static void LeftClick(int x, int y)
{
    Cursor.Position = new System.Drawing.Point(x, y); //<= fails without this
    mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
    mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
}

However unless I am being dumb this move the mouse to the x,y from the top left of the screen which causes me problems if the active window isn't where Im expecting it to be, can anyone suggest a way of achieving the same functionality with moving the mouse to a point relative to the active window.

Thanks

Upvotes: 0

Views: 3859

Answers (4)

Hans Passant
Hans Passant

Reputation: 942368

You need to pinvoke GetWindowRect() to find out where the window is located. So you can adjust x and y by the window position. Visit pinvoke.net for the declarations.

Upvotes: 2

Sasha Reminnyi
Sasha Reminnyi

Reputation: 3532

try PointToClient and PointToScreen of the control you are trying to find relative points to.

Upvotes: 0

Cody Gray
Cody Gray

Reputation: 245001

What you're seeing is indeed the expected behavior. The Cursor.Position property describes the cursor's location in screen coordinates, not relative to your form.

However, every control exposes two handy methods that you can take advantage of to convert between screen coordinates and control coordinates:

  • The Control.PointToClient method computes the location of the specified screen point into client coordinates. Use this to convert from screen coordinates into client coordinates (i.e., those relative to your control, such as a form).

  • The Control.PointToScreen method computes the location of the specified client point into scren coordinates. Use this to convert from client coordinates into screen coordinates.

Upvotes: 0

Emond
Emond

Reputation: 50702

Just subtract the location (relative to the screen) of the window you are targeting.

Upvotes: 0

Related Questions