【问题标题】:How to detect a double-click outside of vb.net form如何检测 vb.net 表单之外的双击
【发布时间】:2023-03-21 07:33:01
【问题描述】:

设置环境:

我正在使用 Visual Studio 2010 并在 vb.net 中编写代码(使用 .NET Framework 4)。


我的目标:

  1. 使用Shell("C:\myprogram.exe", AppWinStyle.NormalFocus)打开一个新的应用程序
  2. 新应用程序作为活动窗口打开,当用户双击时识别

如果活动窗口是一个 vb.net 窗体,那么很容易识别双击事件,如下所示:

Private Sub Button2_DoubleClick(......) Handles Button2.DoubleClick

End Sub


此代码可识别单次左键单击:

  • 这是Form1.vb

    Public Class Form1
    
        Private WithEvents MouseDetector As MouseDetector
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
            MouseDetector = New MouseDetector
    
        End Sub
    
        Private Sub MouseDetector_MouseLeftButtonClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MouseDetector.MouseLeftButtonClick
    
            'Left click occurred
            MsgBox("Left click")
    
        End Sub
    
    End Class
    


  • 这是 MouseDetector.vb 中的枚举

    Private Enum MouseMessages
        WM_LeftButtonDown = 513
        WM_LeftButtonUp = 514
        WM_LeftDblClick = 515
        WM_RightButtonDown = 516
        WM_RightButtonUp = 517
        WM_RightDblClick = 518
    End Enum
    


  • 这是 MouseDetector.vb 中识别单击的函数

    Private Function MouseHookProc(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer
            If nCode < 0 Then
                Return CallNextHookEx(MouseHookID, nCode, wParam, lParam)
            End If
            Dim MouseData As MouseHookStruct = Marshal.PtrToStructure(lParam, GetType(MouseHookStruct))
            Select Case wParam
    
                Case MouseMessages.WM_LeftButtonUp
                    RaiseEvent MouseLeftButtonClick(Nothing, New MouseEventArgs(MouseButtons.Left, 1, MouseData.pt.x, MouseData.pt.y, 0))
    
            End Select
            Return CallNextHookEx(MouseHookID, nCode, wParam, lParam)
        End Function
    


如何识别双击?

显然没有MouseButtons.LeftDoubleclick,但这就是我想要的。


有人愿意就如何做这件事提出建议吗?我真的很感激。

【问题讨论】:

  • 如果您查看globalmousekeyhook.codeplex.com 项目,他们正在全局处理鼠标左右键的鼠标双击事件。
  • @MarkHall 谢谢!这非常有效。继续发表您的评论作为答案,我会接受它

标签: .net vb.net winapi events double-click


【解决方案1】:

如果您查看 CodePlex GlobalMouseKeyHook 项目,他们正在全局处理鼠标左键和右键的鼠标双击事件。

此库附加到 Windows 全局挂钩,跟踪键盘和鼠标的单击和移动,并使用 KeyEventArgs 和 MouseEventArgs 引发常见的 .NET 事件,因此您可以轻松检索所需的任何信息:
鼠标坐标
单击鼠标按钮
鼠标滚轮滚动
按键和释放
特殊键状态

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-06
    • 2021-12-09
    • 2011-01-14
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多