【发布时间】:2023-03-21 07:33:01
【问题描述】:
设置环境:
我正在使用 Visual Studio 2010 并在 vb.net 中编写代码(使用 .NET Framework 4)。
我的目标:
- 使用
Shell("C:\myprogram.exe", AppWinStyle.NormalFocus)打开一个新的应用程序 - 新应用程序作为活动窗口打开,当用户双击时识别
如果活动窗口是一个 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