2 / 2 / 5
Регистрация: 06.04.2010
Сообщений: 176
1

Управление мышкой (эмуляция мыши)

01.03.2011, 17:04. Показов 56372. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, создал отдельную ветку, где надеюсь будут собраны все ответы)))

Нужно сделать полную эмуляцию мышки, нажатие кнопок и перемещение курсора

кнопки нажимать можно использую импортированную API функцию

вот как курсор перемешать могу
C#
1
2
3
mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
mouse_event(0x0002,0,0,0,0);
mouse_event(0x0004,0,0,0,0);
Переместить курсор можно
C#
1
mouse_event(0x0001,x,y,0,0);
Но вот при использование mouse_event(0x0001,x,y,0,0), курсор то перемешается, но мышка(стрелка) остается на мести, т.е. видимое перемещения нету и при движении мышки курсор как бы остается на той же позиции

как сделать перемещение мышки как быд-то пользователь управляет мышкой (чтобы перемешался курсор)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2011, 17:04
Ответы с готовыми решениями:

Управление клавиатурой (эмуляция клавиатуры)
Добрый день, Помогите пожалуйста как через программу сделать нажатия клавиш на клавиатуре ...

Поиск определенных пикселей на экране и эмуляция кликов мыши
Привет всем, нужна помощь! Вообщем смотрим: Итак преступим. Для начала нам нужно импортировать...

Эмуляция прокрутки колеса мыши
Как эмулировать прокрутку колеса мыши?

Эмуляция натурального движения мыши
Всем привет. Нужно эмулировать движение мыши, чтобы было натурально, похоже на то как работает...

10
Заблокирован
01.03.2011, 17:27 2
Лучший ответ Сообщение было отмечено как решение

Решение

а так не получится?
C#
1
Cursor.Position = new Point(X, Y);
3
2 / 2 / 5
Регистрация: 06.04.2010
Сообщений: 176
01.03.2011, 21:47  [ТС] 3
устанавливается курсор на позицию, но стрелка не передвигается

хотелось получить полную эмуляцию мыши, как будто ею двигает пользователь
0
|____WTF!?____|
94 / 93 / 11
Регистрация: 01.06.2010
Сообщений: 227
01.03.2011, 22:06 4
Выставь интервал таймера на 10 или 50 и все нормально будет, как будто пользователь плавно двигает курсор...

C#
1
2
3
4
5
6
 private void timer1_Tick(object sender, EventArgs e)
        {
            
            Point p =new Point(MousePosition.X+1, MousePosition.Y-1);  //эту траекторию представил просто для примера
            Cursor.Position = p;
        }
2
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
01.03.2011, 23:59 5
Лучше через WinAPI:
C#
1
2
[DllImport("user32.dll")]
public static extern void SetCursorPos(int x, int y);
как сделать перемещение мышки как быд-то пользователь управляет мышкой
надо самому рисовать путь:
C#
1
2
3
4
5
for (int i = 0; i < 1000; ++i)
{
    SetCursorPos(i, i);
    System.Threading.Thread.Sleep(1);
}
3
2 / 2 / 5
Регистрация: 06.04.2010
Сообщений: 176
02.03.2011, 13:45  [ТС] 6
Прошу прошения, проблема была связана с виртуальной машиной

SetCursorPos(i, i); - работает, курсор реально перемешается через API
System::Windows::Forms::Cursor::Position = Point(50, 250); и так тоже

C#
1
2
3
4
5
6
7
//пример кода С++/CLR
[DllImport("user32.dll")]
public static extern void SetCursorPos(int x, int y);
 
SetCursorPos(200, 200);
System::Threading::Thread::Sleep(1000);
System::Windows::Forms::Cursor::Position = Point(50, 250);
Добавлено через 2 минуты
а еще не подскажите как кликать мышкой без использования API , через С# ?
0
Заблокирован
02.03.2011, 13:51 7
попробуйте так
C#
1
2
3
4
5
6
7
8
9
10
11
        public Form1()
        {
            InitializeComponent();
            this.MouseClick += new MouseEventHandler(Form1_MouseClick);
            MouseEventArgs e = new MouseEventArgs(MouseButtons.Left, 1, Cursor.Position.X, Cursor.Position.Y, 0);
            Form1_MouseClick(this, e);
        }
        void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            MessageBox.Show(e.X.ToString());
        }
2
Заблокирован
02.03.2011, 14:19 8
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
 using System.Runtime.InteropServices;
    public partial class Form1 : Form
    {
//импортируем mouse_event(): 
[DllImport("User32.dll")] 
static extern void mouse_event(MouseFlags dwFlags, int dx, int dy, int dwData, UIntPtr dwExtraInfo);
 
//для удобства использования создаем перечисление с необходимыми флагами (константами), которые определяют действия мыши: 
[Flags]
enum MouseFlags
{
    Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008,
    RightUp = 0x0010, Absolute = 0x8000
};
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //и использование - клик правой примерно в центре экрана
            const int x = 32000;
            const int y = 32000;
 
            mouse_event(MouseFlags.Absolute | MouseFlags.Move, x, y, 0, UIntPtr.Zero);
            mouse_event(MouseFlags.Absolute | MouseFlags.RightDown, x, y, 0, UIntPtr.Zero);
            mouse_event(MouseFlags.Absolute | MouseFlags.RightUp, x, y, 0, UIntPtr.Zero);
        }
2
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 5
22.06.2012, 11:53 9
SSV,

при использование этого способа, по неизвестной причине, мышь прыгает в верхний левый угол монитора, и выполняет все действия там.

Использование других методов из этой темы приводят к такому же результату, в чем проблема?

Задача стоит нажать на кнопку мыши в определённых координатах (относительно раб стола).
0
Aleksej46
24.07.2012, 12:21 10
А не пробовал юзать white framework?
Практически все операции для работы с мышью поддерживает ??
http://white.codeplex.com/ ссылочка
Max Croud
24.07.2012, 13:47 11
Цитата Сообщение от SSV Посмотреть сообщение
//и использование - клик правой примерно в центре экрана
* * * * * * const int x = 32000;
* * * * * * const int y = 32000;
Это центр экрана?! Ну да ладно. Я использовал этот пример и все работало, единственно что я сделал для клика:
mouse_event(MouseFlags.LeftDown | MouseFlags.LeftUp, 100, 100, 0, UIntPtr.Zero);
а чтобы визуально переместить курсор просто Cursor.Position = new Point(100, 100);
24.07.2012, 13:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.07.2012, 13:47
Помогаю со студенческими работами здесь

Эмуляция мыши: перемещение ярлыка на рабочем столе
Доброго времени всем! Придумал себе задачу: на рабочем столе лежит ярлык. Необходимо его...

Управление мышкой через directinput
Всем привет, с наступающим новым годом! Если нажата клавиша F2 на клавиатуре, получить...

Эмуляция мыши: как осуществить или где почитать
Зравствуйте! Перерыл кучу ресурсов, внятного ответа на свой вопрос не нашел, объясните, или дайте...

Управление камерой посредством мыши Unity3d
Здравствуйте, прошу помощи. Облазил весь интернет и ничего не нашел, либо нашел только какие-то...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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