全局鼠标按下检测
Global mouse down detection
如何通过 C# 检测鼠标何时在 Windows 上(全局)按下?
我正在尝试将功能绑定到我的(例如,右键)按下时。
如何运作:
按下鼠标右键 -> 在事件调用时 -> 调用的函数
鼠标右键向上 -> 在事件调用中 -> 调用的函数
也许您可以使用此、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# 中检测鼠标 up/down 事件,
<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 挂钩。代码项目文章 https://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C 中名为“下载源文件 [版本 2]”的示例包含名为 HookManager
.
的静态 class
当您订阅 HookManager.MouseClick
时,您将在每次鼠标点击系统中的任何 window 时收到回调(不仅仅是在您的应用程序中)。并且 Button
属性 of MouseEventArgs e
参数将帮助您确定单击了哪个按钮。
请参阅示例项目中的 TestFormStatic class。
如何通过 C# 检测鼠标何时在 Windows 上(全局)按下? 我正在尝试将功能绑定到我的(例如,右键)按下时。
如何运作:
按下鼠标右键 -> 在事件调用时 -> 调用的函数
鼠标右键向上 -> 在事件调用中 -> 调用的函数
也许您可以使用此、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# 中检测鼠标 up/down 事件,
<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 挂钩。代码项目文章 https://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C 中名为“下载源文件 [版本 2]”的示例包含名为 HookManager
.
当您订阅 HookManager.MouseClick
时,您将在每次鼠标点击系统中的任何 window 时收到回调(不仅仅是在您的应用程序中)。并且 Button
属性 of MouseEventArgs e
参数将帮助您确定单击了哪个按钮。
请参阅示例项目中的 TestFormStatic class。