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

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

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

Доброго времени всем! Придумал себе задачу: на рабочем столе лежит ярлык. Необходимо его программно, по нажатию на кнопку, переместить в другое место с наперёд заданными координатами. Как я это понимаю: 1)наводим курсор на ярлык; 2) зажимаем ЛКМ; 3)перемещаем курсор на новую позицию; 4) отжимаем ЛКМ. Пишу в WinForms. Код прилагаю. Прошу совета: что в коде не так? Наперёд благодарен за любую подсказку!
Листинг программы
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. namespace MouseEmul
  5. {
  6. public partial class Form1 : Form
  7. {
  8. [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
  9. public static extern void mouse_event(uint dwFlags,int dx,int dy,int dwData,int dwExtraInfo);
  10. //Нормированные абсолютные координаты
  11. private const int MOUSEEVENTF_ABSOLUTE = 0x8000;
  12. //Нажатие на левую кнопку мыши
  13. private const int MOUSEEVENTF_LEFTDOWN = 0x0002;
  14. //Поднятие левой кнопки мыши
  15. private const int MOUSEEVENTF_LEFTUP = 0x0004;
  16. //перемещение указателя мыши
  17. private const int MOUSEEVENTF_MOVE = 0x0001;
  18. public Form1()
  19. {
  20. InitializeComponent();
  21. }
  22. private void button1_Click(object sender, EventArgs e)
  23. {
  24. //Координаты ярлыка на экране:
  25. int X = 30;
  26. int Y = 30;
  27. //Перемещение курсора на указанные координаты
  28. mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,
  29. System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width,
  30. System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Height, X, Y);
  31. //Выполнение клика левой клавишей мыши
  32. mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
  33. //Изменение положения курсора на новое
  34. Cursor.Position = new Point(Cursor.Position.X + 500, Cursor.Position.Y + 500);
  35. //Отжимаем левую клавишу мыши
  36. mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
  37. }
  38. }
  39. }

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

textual
Листинг программы
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using System.Threading.Tasks;
  4. using System.Windows.Forms;
  5.  
  6. namespace WindowsFormsApplication1
  7. {
  8.     public partial class Form1 : Form
  9.     {
  10.         public Form1()
  11.         {
  12.             InitializeComponent();
  13.             this.StartPosition=FormStartPosition.CenterScreen;
  14.         }
  15.    
  16.        
  17.         private async void button1_Click(object sender, EventArgs e)
  18.         {
  19.             int x = 20, y = 20;// top shortcut on desktop
  20.             Worker.SetCursorPos(0, 0);
  21.             Worker.mouse_event(0x1,x,y,0,0); //move
  22.             Worker.mouse_event(0x2, 0,0,0,0);//left down
  23.             Worker.mouse_event(0x1,100,100,0,0);//move, 100,100 is a new location
  24.             await Task.Delay(1000);
  25.             Worker.mouse_event(0x4,0,0,0,0);//left up
  26.            
  27.         }
  28.     }
  29.  
  30.     class Worker
  31.     {
  32.         [DllImport("user32.dll")]
  33.         public static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, int dwExtraInfo);
  34.         [DllImport("user32.dll")]
  35.         [return: MarshalAs(UnmanagedType.Bool)]
  36.         public static extern bool SetCursorPos(int x, int y);
  37.  
  38.     }
  39. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут