【问题标题】:Global mouse down detection全局鼠标按下检测
【发布时间】:2022-01-18 23:48:30
【问题描述】:

如何通过 C# 在 Windows 上检测鼠标何时关闭(全局)? 我正在尝试将一个函数绑定到我的,例如,右键按下时。

工作原理:
鼠标右键按下 -> 事件调用 -> 函数调用
鼠标右键向上 -> 事件调用 -> 函数调用

【问题讨论】:

  • 你的意思是鼠标左键还是右键?

标签: c# windows mouseevent mouse desktop-application


【解决方案1】:

也许你可以使用这个,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;
            }
    }

【讨论】:

    【解决方案2】:

    如果您使用 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函数,函数显示消息。

    【讨论】:

      【解决方案3】:

      您可以使用 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 类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-14
        相关资源
        最近更新 更多