private void DoMouseInput(int x, int y, bool absoluteCoordinates, bool?mouseDown) { // TODO: Maybe we should instead send WM_MOUSEMOVE, WM_LBUTTONDOWN etc. // messages directly to the destination window so that we don't need to // position the mouse cursor which makes it harder e.g. to // click on the "Stop" button of the simulator. // Convert the screen coordinates into mouse coordinates. var cs = new Coordinates(x, y); cs = GetMouseCoordinatesFromScreenCoordinates(cs); var mi = new NativeMethods.MOUSEINPUT(); mi.dx = cs.X; mi.dy = cs.Y; if (absoluteCoordinates) { mi.dwFlags |= NativeMethods.MOUSEEVENTF.ABSOLUTE; } if (!(!absoluteCoordinates && x == 0 && y == 0)) { // A movement occured. mi.dwFlags |= NativeMethods.MOUSEEVENTF.MOVE; } if (mouseDown.HasValue) { mi.dwFlags |= mouseDown.Value ? NativeMethods.MOUSEEVENTF.LEFTDOWN : NativeMethods.MOUSEEVENTF.LEFTUP; } var input = new NativeMethods.INPUT(); input.type = NativeMethods.INPUT_MOUSE; input.U.mi = mi; NativeMethods.INPUT[] inputs = { input }; if (NativeMethods.SendInput(1, inputs, NativeMethods.INPUT.Size) == 0) { throw new Win32Exception(); } }
private void DoMouseInput(int x, int y, bool absoluteCoordinates, bool? mouseDown) { // TODO: Maybe we should instead send WM_MOUSEMOVE, WM_LBUTTONDOWN etc. // messages directly to the destination window so that we don't need to // position the mouse cursor which makes it harder e.g. to // click on the "Stop" button of the simulator. // Convert the screen coordinates into mouse coordinates. Coordinates cs = new Coordinates(x, y); cs = GetMouseCoordinatesFromScreenCoordinates(cs); var mi = new NativeMethods.MOUSEINPUT(); mi.dx = cs.X; mi.dy = cs.Y; if (absoluteCoordinates) mi.dwFlags |= NativeMethods.MOUSEEVENTF.ABSOLUTE; if (!(!absoluteCoordinates && x == 0 && y == 0)) { // A movement occured. mi.dwFlags |= NativeMethods.MOUSEEVENTF.MOVE; } if (mouseDown.HasValue) { mi.dwFlags |= mouseDown.Value ? NativeMethods.MOUSEEVENTF.LEFTDOWN : NativeMethods.MOUSEEVENTF.LEFTUP; } var input = new NativeMethods.INPUT(); input.type = NativeMethods.INPUT_MOUSE; input.U.mi = mi; NativeMethods.INPUT[] inputs = { input }; if (NativeMethods.SendInput(1, inputs, NativeMethods.INPUT.Size) == 0) throw new System.ComponentModel.Win32Exception(); }