Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 10
1

Ошибка с эмулированием щелчка мыши

31.08.2016, 22:29. Показов 1349. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код, все работает, но проблема в том, что отладчик останавливает выполнение кода и пишет вот это:

PInvokeStackImbalance произошло

Помощник отладки управляемого кода "PInvokeStackImbalance" обнаружил неполадку в "C:\Users\Alexandr\Documents\Visual Studio 2015\Projects\Clicker\Clicker\bin\Debug\Clicker.vshost.exe".

Дополнительные сведения: Вызов функции PInvoke "Clicker!Clicker.Form1::mouse_event" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой. Убедитесь, что соглашение о вызовах и параметры сигнатуры PInvoke совпадают с неуправляемой целевой сигнатурой.

Что делать? Вот сам код:

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
namespace Clicker
{
    public partial class Form1 : Form
    {
 
  
        public Form1()
        {
            InitializeComponent();
        }
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
        private const int MOUSEEVENTF_LEFTDOWN = 0x02;
        private const int MOUSEEVENTF_LEFTUP = 0x04;
        private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
        private const int MOUSEEVENTF_RIGHTUP = 0x10;
 
        private void button1_Click(object sender, EventArgs e)
        {
            Cursor.Position = new Point(945, 320);
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, (long)945, (long)320, 0, 0);
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2016, 22:29
Ответы с готовыми решениями:

Как можно перехватить координаты щелчка мыши, если щелчок делается не на форме
Здравствуйте! Как можно перехватить координаты щелчка мыши, если щелчок делается не на форме. То...

Имитация щелчка мыши
Всем привет. Подскажите как имитировать клик мыши не в 1 пиксель, а полосой пикселей, к...

Обработка щелчка мыши
Добрый день! У меня такой вопрос - надо сделать так, чтобы щелкая мышкой в одном месте рисунка...

Выводить информацию после щелчка мыши
у меня есть код, выводящий координаты мыши, но мне нужно, чтобы координаты выводились только после...

3
37 / 37 / 24
Регистрация: 13.12.2010
Сообщений: 113
31.08.2016, 23:24 2
marfear, попробуйте поиграться с разными CallingConvention
0
Администратор
Эксперт .NET
17566 / 13788 / 5299
Регистрация: 17.03.2014
Сообщений: 28,266
Записей в блоге: 1
01.09.2016, 14:18 3
Лучший ответ Сообщение было отмечено marfear как решение

Решение

marfear, вместо long нужно использовать uint или int т.к. DWORD тип из Windows API это четырех-байтовое целое. Советую смотреть сигнатуры методов на сайте pinvoke.net.
1
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 10
01.09.2016, 14:58  [ТС] 4
Спасибо
0
01.09.2016, 14:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2016, 14:58
Помогаю со студенческими работами здесь

Обработка щелчка мыши в Edit-окошке
Здравия желаю. Начал изучать WinAPI и столкнулся с проблемой: не знаю, как обработать сообщения...

Найти координаты щелчка мыши в 3D сцене (WebGL, Three.js)
Здравствуйте, форумчане! Помогите, пожалуйста, с решением вот такой вот задачи: Имеется...

Как перехватить событие щелчка мыши по Shape?
Собственно, сабж. Хэлп предупреждает, что нормально перехватывается только клк на ActiveSheet, т.е....

QTableWidget + QContextMenu. Отслеживание правого щелчка мыши
Здраствуйте. Есть функция контестного меню, которая вызывается при правом щелчке мыши на...


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

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