全局鼠标按下检测

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。