【发布时间】:2022-01-18 23:48:30
【问题描述】:
如何通过 C# 在 Windows 上检测鼠标何时关闭(全局)? 我正在尝试将一个函数绑定到我的,例如,右键按下时。
工作原理:
鼠标右键按下 -> 事件调用 -> 函数调用
鼠标右键向上 -> 事件调用 -> 函数调用
【问题讨论】:
-
你的意思是鼠标左键还是右键?
标签: c# windows mouseevent mouse desktop-application
如何通过 C# 在 Windows 上检测鼠标何时关闭(全局)? 我正在尝试将一个函数绑定到我的,例如,右键按下时。
工作原理:
鼠标右键按下 -> 事件调用 -> 函数调用
鼠标右键向上 -> 事件调用 -> 函数调用
【问题讨论】:
标签: c# windows mouseevent mouse desktop-application
也许你可以使用这个,MouseClick 或 MouseWheel。我对其进行测试并将其从 vb.net 转换为 C#
private void Form1_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Delta > 0)
MessageBox.Show("Up");
else
MessageBox.Show("Down");
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
switch (e.Button)
{
case object _ when MouseButtons.Left:
{
MessageBox.Show(this, "Left Button Click");
break;
}
case object _ when MouseButtons.Right:
{
MessageBox.Show(this, "Right Button Click");
break;
}
case object _ when MouseButtons.Middle:
{
break;
}
default:
{
break;
}
}
【讨论】:
如果您使用 XAML 并需要在 C# 中检测鼠标上/下事件,
<Grid Name="pnlMainGrid" MouseUp="pnlMainGrid_MouseUp" Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label>Names</Label>
</Grid>
那么你需要定义Mouse up事件
private void pnlMainGrid_MouseUp(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("You clicked me");
}
逻辑走,点击标签(你可以定义为其他东西,比如按钮,布局等)调用pnlMainGrid_MouseUp函数,函数显示消息。
【讨论】:
您可以使用 WinApi 中的 Windows Hooks。来自 codeproject 文章 https://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C 的名为“下载源文件 [版本 2]”的示例包含名为 HookManager 的静态类。
当您订阅HookManager.MouseClick 时,您将在每次鼠标点击系统中任何窗口(不仅仅是在您的应用程序中)时收到回调。和Button
MouseEventArgs e 参数的属性将帮助您确定单击了哪个按钮。
参见示例项目中的 TestFormStatic 类。
【讨论】: