首页 > 解决方案 > 在 VB.net 屏幕上的任意位置使用鼠标滚动

问题描述

我正在尝试使用鼠标按钮和滚动组合设置全局快捷方式(按下鼠标右键时向上(或向下)滚动)。

我想我应该尝试对鼠标滚动做出反应,但我不知道如何检测表单之外的鼠标滚轮。

现在,我让它通过计时器对鼠标点击做出反应,并将表单设置为始终在顶部(没有问题,它总是在顶部),但不知道如何进行。

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

    If MouseButtons.HasFlag(MouseButtons.Right) = True Then
        TextBox1.Text = "YES"
    Else
        TextBox1.Text = "NO"
    End If

End Sub

目标是使其最小化用户使用该快捷方式设置的应用程序,以防万一该信息有帮助。我有其余的代码只是无法弄清楚那部分。

编辑:它在表单内部工作:

Private Sub ListBoxCHOWAJ_MouseWheel(sender As Object, e As MouseEventArgs) Handles ListBoxCHOWAJ.MouseWheel

    If MouseButtons.HasFlag(MouseButtons.Right) = True Then
        If e.Delta > 0 Then
            TextBox1.Text = "up"
        Else
            TextBox1.Text = "down"
        End If
    End If

End Sub

标签: vb.nethook

解决方案


您需要一个鼠标钩子来检测应用程序外的滚动。看看我的InputHelper 库和它的低级鼠标钩子

要将其包含在您的项目中,请下载已编译的 DLL并将其添加为参考:

  1. 右键单击您的项目,Solution Explorer然后按Add Reference...

  2. 转到Browse选项卡。

  3. 找到 InputHelper DLL 文件,选择它并按OK

您可以在钩子的MouseWheel事件处理程序中执行所有逻辑,不再需要计时器:

Imports InputHelperLib

Public Class Form1

    Dim WithEvents MouseHook As New InputHelper.Hooks.MouseHook

    Private Sub MouseHook_MouseWheel(sender As Object, e As InputHelperLib.InputHelper.Hooks.MouseHookEventArgs) Handles MouseHook.MouseWheel
        If MouseButtons.HasFlag(MouseButtons.Right) = True Then
            'Do something...
        End If
    End Sub
End Class

没有必要e.Delta像你一样检查,因为它永远不会是 0。


推荐阅读