Использовать глобальный крючок мыши
Используйте глобальную мышиную ловушку для отслеживания и при необходимости блокировки событий мыши.
Примером реализации глобальной ловушки мыши / клавиатуры является пакет MouseKeyHook и исходный код GitHub globalmousekeyhook .
Блокировка только пользовательских кликов
Если вы хотите, чтобы пользователь не нажимал, но продолжали посылать щелчки автоматизации, вы можете поднять флажок, чтобы сигнализировать событию мыши, чтобы он не блокировал следующий щелчок.
Примечание. Существует небольшая вероятность того, что в течение небольшого промежутка времени от момента, когда флаг был поднят, до того, как событие отфильтровывает следующую мышь, щелчок пользователя будет захвачен хуком вместо автоматизация клик.
Пример блокировки событий мыши
В следующем коде я привожу пример использования MouseKeyHook nuget-пакета для предотвращения глобальных щелчков мыши в течение TimeSpan
промежутка времени:
Требуется с помощью объявлений:
using System.Diagnostics;
using Gma.System.MouseKeyHook;
Код:
// Global hook
private IKeyboardMouseEvents _globalHook;
// Stopwatch to count the amount of time the global mouse down events are blocked
private Stopwatch _stopwatch = new Stopwatch();
// The amount of time to block global mouse down events
private TimeSpan _timeSpan;
// Attach global hook
private void Subscribe()
{
_globalHook = Hook.GlobalEvents();
_globalHook.MouseDownExt += GlobalHookMouseDownExt;
}
// Remove global hook
private void Unsubscribe()
{
_globalHook.MouseDownExt -= GlobalHookMouseDownExt;
_globalHook.Dispose();
}
// Global hook mouse down event
private void GlobalHookMouseDownExt(object sender, MouseEventExtArgs e)
{
if(_stopwatch.IsRunning)
{
if(_stopwatch.Elapsed < _timeSpan)
{
e.Handled = true;
}
else
{
_stopwatch.Stop();
}
}
}
// Block global mouse down events for timeSpan amount of time
private void BlockMouseDown(TimeSpan timeSpan)
{
_timeSpan = timeSpan;
_stopwatch.Restart();
}
Использование:
// Attach global hook
Subscribe();
...
// Block mouse down event for 10 seconds
BlockMouseDown(TimeSpan.FromSeconds(10));