Эмуляция мыши: перемещение ярлыка на рабочем столе - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени всем! Придумал себе задачу: на рабочем столе лежит ярлык. Необходимо его программно, по нажатию на кнопку, переместить в другое место с наперёд заданными координатами. Как я это понимаю: 1)наводим курсор на ярлык; 2) зажимаем ЛКМ; 3)перемещаем курсор на новую позицию; 4) отжимаем ЛКМ. Пишу в WinForms. Код прилагаю. Прошу совета: что в коде не так? Наперёд благодарен за любую подсказку!
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace MouseEmul
{
    public partial class Form1 : Form
    {
        [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto,  CallingConvention =  System.Runtime.InteropServices.CallingConvention.StdCall)]
        public static extern void mouse_event(uint dwFlags,int dx,int dy,int dwData,int dwExtraInfo);
        //Нормированные абсолютные координаты
        private const int MOUSEEVENTF_ABSOLUTE = 0x8000;
        //Нажатие на левую кнопку мыши
        private const int MOUSEEVENTF_LEFTDOWN = 0x0002;
        //Поднятие левой кнопки мыши
        private const int MOUSEEVENTF_LEFTUP = 0x0004;
        //перемещение указателя мыши
        private const int MOUSEEVENTF_MOVE = 0x0001;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //Координаты ярлыка на экране:     
            int X = 30;
            int Y = 30;
            //Перемещение курсора на указанные координаты
            mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,
                System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width,
                System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Height, X, Y);
            //Выполнение клика левой клавишей мыши
            mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
            //Изменение положения курсора на новое
            Cursor.Position = new Point(Cursor.Position.X + 500, Cursor.Position.Y + 500);
            //Отжимаем левую клавишу мыши
            mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
 
        }
    }
}

Решение задачи: «Эмуляция мыши: перемещение ярлыка на рабочем столе»

textual
Листинг программы
using System;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.StartPosition=FormStartPosition.CenterScreen;
        }
   
        
        private async void button1_Click(object sender, EventArgs e)
        {
            int x = 20, y = 20;// top shortcut on desktop
            Worker.SetCursorPos(0, 0);
            Worker.mouse_event(0x1,x,y,0,0); //move
            Worker.mouse_event(0x2, 0,0,0,0);//left down
            Worker.mouse_event(0x1,100,100,0,0);//move, 100,100 is a new location
            await Task.Delay(1000);
            Worker.mouse_event(0x4,0,0,0,0);//left up
            
        }
    }
 
    class Worker
    {
        [DllImport("user32.dll")]
        public static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, int dwExtraInfo);
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetCursorPos(int x, int y);
 
    }
}

Оцени полезность:

9   голосов , оценка 3.556 из 5