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