Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/23: Рейтинг темы: голосов - 23, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 10.06.2017
Сообщений: 4
1

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

10.06.2017, 13:05. Показов 4559. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени всем! Придумал себе задачу: на рабочем столе лежит ярлык. Необходимо его программно, по нажатию на кнопку, переместить в другое место с наперёд заданными координатами. Как я это понимаю: 1)наводим курсор на ярлык; 2) зажимаем ЛКМ; 3)перемещаем курсор на новую позицию; 4) отжимаем ЛКМ. Пишу в WinForms. Код прилагаю. Прошу совета: что в коде не так? Наперёд благодарен за любую подсказку!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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);
 
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2017, 13:05
Ответы с готовыми решениями:

Координаты ярлыка на рабочем столе
Требуется найти координаты ярлыка на рабочем столе. Слышал это можно сделать через ListView, но как...

InstallShield 2010: размещение ярлыка на рабочем столе
Всем доброго времени суток. Сразу перейду к делу. Использую InstallShield 2010 и visual Studio...

«Панель управления» на рабочем столе без использования ярлыка
как сделать доступной «Панель управления» на рабочем столе без использования ярлыка???????????????

Нужно, чтобы изображение двигалось по принципу ярлыка на рабочем столе
Доброго времени суток! Нужно, чтобы изображение двигалось по принципу ярлыка на рабочем столе. у...

3
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
10.06.2017, 15:25 2
Лучший ответ Сообщение было отмечено Salve как решение

Решение

Salve,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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);
 
    }
}
1
0 / 0 / 0
Регистрация: 10.06.2017
Сообщений: 4
10.06.2017, 16:20  [ТС] 3
Спасибо огромное! Можно тогда ещё уточняющий вопрос: каким образом в Вашем примере рассчитываются координаты?
Как понимаю, за это отвечает строка:
C#
1
            Worker.mouse_event(0x1,100,100,0,0);//move, 100,100 is a new location
Когда поменял числа 100 и 100 на 600 и 600, указатель мыши "забился" в угол экрана, хотя по пикселям мой экран больше.
0
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
10.06.2017, 16:59 4
Salve, у меня все также с разрешением 1600x900. Не могу ответить.
0
10.06.2017, 16:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2017, 16:59
Помогаю со студенческими работами здесь

Как получить путь к самому ярлыку на рабочем столе, а не к приложению этого ярлыка?
Объясняю. Пишу следующее: OpenFileDialog OpenFile1 = new OpenFileDialog(); ...

Клик мыши на рабочем столе
Вопрос значит такой - как отследить клик мыши на рабочем столе, за пределами Java компонентов....

Программы не запускаются на рабочем столе, ко всем ярлыкам на рабочем столе добавляется приставка .Ink
Помогите пожалуйста, использовал рекомендованную вами программу CureIT (нашел 18 вредоносных...

Координаты мыши на рабочем столе по осям Х и У
Привет! Помогите пожалуйста создать программу которая описана дальше. Перемещая курсор мыши по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru