Эмуляция мыши: перемещение ярлыка на рабочем столе - 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д