static void ComputeRectRelativeToParent(IntPtr hWnd, IntPtr hwndParent, out PInvoke.RECT clientParent, out PInvoke.RECT client) { PInvoke.RECT rw, rc; PInvoke.GetWindowRect(hWnd, out rw); PInvoke.GetClientRect(hWnd, out rc); PInvoke.RECT rpw, rpc; PInvoke.GetWindowRect(hwndParent, out rpw); PInvoke.GetClientRect(hwndParent, out rpc); PInvoke.POINT p0 = new PInvoke.POINT() { X = rw.Left, Y = rw.Top }; PInvoke.ScreenToClient(hwndParent, ref p0); PInvoke.POINT p1 = new PInvoke.POINT() { X = rw.Right, Y = rw.Bottom }; PInvoke.ScreenToClient(hwndParent, ref p1); clientParent = rpc; client = new PInvoke.RECT() { Left = p0.X, Top = p0.Y, Right = p1.X, Bottom = p1.Y }; }
public static void Click(IntPtr handle, Location location) { if (location != null) { var p = new PInvoke.POINT(); // DOESN'T WORK! not getting clicked! p.X = location.X; p.Y = location.Y; PInvoke.ScreenToClient(handle, ref p); var lParam = p.X | (p.Y << 16); unsafe { PInvoke.SendMessage(handle, PInvoke.WM_LBUTTONDOWN, (IntPtr)0x1, new IntPtr(&p)); PInvoke.SendMessage(handle, PInvoke.WM_LBUTTONUP, (IntPtr)0x1, new IntPtr(&p)); } } else { PInvoke.SendMessage(handle, PInvoke.WM_LBUTTONDOWN, (IntPtr)0x1, (IntPtr)0); PInvoke.SendMessage(handle, PInvoke.WM_LBUTTONUP, (IntPtr)0x1, (IntPtr)0); } }