C #: drag any window from code (programmatically)

Please let me clarify what I am doing.

I am creating a screen sharing application. Where there are 2 applications, this is a Windows application (whose screen is shared), and the other is a web browser application (on which the user views the screen). The browser web application sends the client xand ymouse coordinates to the Windows application. The Windows application uses the coordinates xand yto move the mouse using the code below.

        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int X, int Y);

        public static void MoveCursorToPoint(int x, int y)
        {
            SetCursorPos(x, y);
        }

The browser application also sends mouse clicks, and the Windows application performs clicks using the code below.

        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);

        private const int MOUSEEVENTF_LEFTDOWN = 0x02;
        private const int MOUSEEVENTF_LEFTUP = 0x04;
        private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
        private const int MOUSEEVENTF_RIGHTUP = 0x10;

        public static void DoMouseClick()
        {
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
        }

Problem / challenge

- . , #.

.

+4
1

, , . , MouseDown ( ) . , MouseUp (Release Click), - .

  MouseHelper mh = new MouseHelper();
            mh.sendMouseDown();
            Cursor.Position = new Point(30, 30);
            mh.sendMouseUp();

    public class MouseHelper
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        //public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
        public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

        private const uint MOUSEEVENTF_LEFTDOWN = 0x02;
        private const uint MOUSEEVENTF_LEFTUP = 0x04;
        private const uint MOUSEEVENTF_RIGHTDOWN = 0x08;
        private const uint MOUSEEVENTF_RIGHTUP = 0x10;

        public void sendMouseRightclick(Point p)
        {
            mouse_event((uint)MOUSEEVENTF_RIGHTDOWN | (uint)MOUSEEVENTF_RIGHTUP, (uint)p.X, (uint)p.Y, (uint)0, (uint)0);
        }

        public void sendMouseDoubleClick(Point p)
        {
            mouse_event((uint)MOUSEEVENTF_LEFTDOWN | (uint)MOUSEEVENTF_LEFTUP, (uint)p.X, (uint)p.Y, (uint)0, (uint)0);

            Thread.Sleep(150);

            mouse_event((uint)MOUSEEVENTF_LEFTDOWN | (uint)MOUSEEVENTF_LEFTUP, (uint)p.X, (uint)p.Y, 0, 0);
        }

        public void sendMouseRightDoubleClick(Point p)
        {
            mouse_event((uint)MOUSEEVENTF_RIGHTDOWN | (uint)MOUSEEVENTF_RIGHTUP, (uint)p.X, (uint)p.Y, 0, 0);

            Thread.Sleep(150);

            mouse_event((uint)MOUSEEVENTF_RIGHTDOWN | (uint)MOUSEEVENTF_RIGHTUP, (uint)p.X, (uint)p.Y, 0, 0);
        }

        public void sendMouseDown()
        {
            mouse_event(MOUSEEVENTF_LEFTDOWN, 50, 50, 0, 0);
        }

        public void sendMouseUp()
        {
            mouse_event(MOUSEEVENTF_LEFTUP, 50, 50, 0, 0);
        }
    }

: PInvoke "KinectHandTrackmyApping! myApp.MainWindow:: mouse_event" . , , PInvoke . , PInvoke .

,

public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);

public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

long, long , 64- uint , 32-, ( Windows).

0

Source: https://habr.com/ru/post/1629329/


All Articles