Click at specified client area
- by VixinG
Click doesn't work - I don't know why and can't find a solution :(
ie. Click(150,215) should move mouse to the client area and click there.
[DllImport("user32.dll")]
private static extern bool ScreenToClient(IntPtr hWnd, ref Point lpPoint);
[DllImport("user32", SetLastError = true)]
private static extern int SetCursorPos(int x, int y);
static void MouseMove(int x, int y)
{
Point p = new Point(x * -1, y * -1);
ScreenToClient(hWnd, ref p);
p = new Point(p.X * -1, p.Y * -1);
SetCursorPos(p.X, p.Y);
}
static void Click(int x, int y)
{
MouseMove(x, y);
SendMessage(hWnd, WM_LBUTTONDOWN, (IntPtr)0x1, new IntPtr(y * 0x10000 + x));
SendMessage(hWnd, WM_LBUTTONUP, (IntPtr)0x1, new IntPtr(y * 0x10000 + x));
}
Edit:
Of course I can use mouse_event for that, but I would like to see a solution for SendMessage()...
[DllImport("user32.dll")]
static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
const int LEFTDOWN = 0x00000002;
const int LEFTUP = 0x00000004;
static void Click(int x, int y)
{
MouseMove(x, y);
mouse_event((int)(LEFTDOWN), 0, 0, 0, 0);
mouse_event((int)(LEFTUP), 0, 0, 0, 0);
}