如何阻止用户在会话期间单击屏幕上的任意位置 activity
How to stop a user from clicking anywhere on the screen during session activity
我正在编写一个自动化应用程序,其中有一个程序已打开,当该程序打开时,我不希望允许用户单击屏幕上的任何位置,因为这会导致自动化可能在特定 points.I 无法找到任何对此有解决方案的人,大多数解决方案仅提供按钮或特定 windows 的答案,但我想为用户完全禁用鼠标单击。有办法吗?
使用全局鼠标挂钩
使用全局鼠标钩子来监视和选择性地阻止鼠标事件。
全局 mouse/keyboard 挂钩的示例实现是 MouseKeyHook nuget package and the GitHub source code 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));
我正在编写一个自动化应用程序,其中有一个程序已打开,当该程序打开时,我不希望允许用户单击屏幕上的任何位置,因为这会导致自动化可能在特定 points.I 无法找到任何对此有解决方案的人,大多数解决方案仅提供按钮或特定 windows 的答案,但我想为用户完全禁用鼠标单击。有办法吗?
使用全局鼠标挂钩
使用全局鼠标钩子来监视和选择性地阻止鼠标事件。
全局 mouse/keyboard 挂钩的示例实现是 MouseKeyHook nuget package and the GitHub source code 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));