在VB.net屏幕上的任何位置使用鼠标滚动

时间:2018-06-26 08:32:26

标签: vb.net hook

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

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

现在,我可以响应计时器的鼠标单击,并将表单设置为始终位于最前面(不存在总是位于顶部的问题),但是不知道如何进行。

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

1 个答案:

答案 0 :(得分:0)

您需要一个鼠标钩来检测应用程序外部的滚动。看看我的InputHelper library及其low-level mouse hook

要将其包含在您的项目中,请下载compiled 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。