3 / 3 / 5
Регистрация: 15.05.2015
Сообщений: 265
1

Глобальный Хук для мыши с отслеживанием удержания ЛКМ

09.05.2016, 20:04. Показов 3756. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Для программы нужен хук, который позволит программе реагировать не только на нажатие ЛКМ, но так же и её удерживание! Долго искал, но гугл молчит. Если и есть готовые хуки, то они довольно сложные для новичка вроде меня.
А вообще нужно, что бы реализовалось следующее: При нажатии на ЛКМ в любом месте (вне окна программы) на форме в поле textBox1 с каждым кликом прибавлялось +1. Т.е. такой себе счётчик нажатий на ЛКМ. При этом если зажать ЛКМ прибавления должны продолжатся с определенной частотой. Если у Вас есть подобный код, или опыт работы в Хуком мыши - прошу сразу привести пример реализации

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

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

Глобальный хук для мыши
Суть проблемы такова: Имеется прога, при нажатии на Button (при условии выбора определенной строки...

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

Глобальный хук мыши
Ребят подскажите пожалуйста где у меня ошибка почему при нажатиии мыши у меня не срабатывает моя...

4
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
09.05.2016, 20:18 2
Здравствуйте!

Вот простенькая реализация с использованием http://keyboardmousehooks.code... umentation.
Оттуда можно скачать единственный файл MouseHook.cs и положить в Ваш проект.

Демо-приложение делал на WPF.

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
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
 
            var hook = new RamGecTools.MouseHook();
            hook.LeftButtonDown += Hook_LeftButtonDown;
            hook.LeftButtonUp += Hook_LeftButtonUp;
            hook.Install();
        }        
 
        private int _clickCount;
        private  DispatcherTimer _timer;
 
        private void Hook_LeftButtonDown(RamGecTools.MouseHook.MSLLHOOKSTRUCT mouseStruct)
        {            
            _timer = new DispatcherTimer(TimeSpan.FromSeconds(1), DispatcherPriority.Normal, (s,e)=>Increment(), Dispatcher);
            Increment();
        }
 
        private void Hook_LeftButtonUp(RamGecTools.MouseHook.MSLLHOOKSTRUCT mouseStruct)
        {            
            if (_timer != null)
            {
                _timer.Stop();
                _timer = null;
            }
        }
 
        private void Increment()
        {
            Title = (++_clickCount).ToString();
        }
    }
1
3 / 3 / 5
Регистрация: 15.05.2015
Сообщений: 265
09.05.2016, 20:50  [ТС] 3
Программа матерится на DispatcherTimer, я так понимаю что дело из-за того что программа в WinForms с ним "не дружит"??

Добавлено через 7 минут
Я только что проверил - честно говоря это практически то что я искал)
Но нет ли примера реализации без WPF? Я с формами ещё не до конца разобрался, а это совсем новое для меня))
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
09.05.2016, 21:45 4
Лучший ответ Сообщение было отмечено Oxik как решение

Решение

Просто замените таймер.

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
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            var hook = new RamGecTools.MouseHook();
            hook.LeftButtonDown += Hook_LeftButtonDown;
            hook.LeftButtonUp += Hook_LeftButtonUp;
            hook.Install();
        }
 
        private int _clickCount;
        private Timer _timer;
 
        private void Hook_LeftButtonDown(RamGecTools.MouseHook.MSLLHOOKSTRUCT mouseStruct)
        {
            _timer = new Timer();
            _timer.Interval = 1000;
            _timer.Tick += (s, e) => Increment();
            _timer.Start();
            Increment();
        }
 
        private void Hook_LeftButtonUp(RamGecTools.MouseHook.MSLLHOOKSTRUCT mouseStruct)
        {
            if (_timer != null)
            {
                _timer.Stop();
                _timer.Dispose();
                _timer = null;
            }
        }
 
        private void Increment()
        {
            Text = (++_clickCount).ToString();
        }
    }
Цитата Сообщение от Oxik Посмотреть сообщение
Программа матерится на DispatcherTimer
Это WPF-ный таймер. Находится в сборке WindowsBase.dll.
2
3 / 3 / 5
Регистрация: 15.05.2015
Сообщений: 265
09.05.2016, 22:05  [ТС] 5
ДА! Всё работает! Спасибо!!
0
09.05.2016, 22:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2016, 22:05
Помогаю со студенческими работами здесь

Глобальный хук клавиатуры/мыши в Lazarus
Здравствуйте, не подскажете, что лучше использовать для глобального хука клавиатуры/мыши? Мне...

Глобальный файловый хук WinAPI для конкретного процесса
Нужен пример реализации файлового хука, который будет ловить функции ReadFile, OpenFile, WriteFile...

Глобальный хук клавиатуры для системных приложений. Почему зависает?
Здравствуйте. Имеется задача: перехватывать нажатие клавиш во всей системе. После изучения...

глобальный хук
помогите с программой(с какой стороны начинать) : нужно что бы работала как глобальный хук - в...


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

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

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