首页 > 解决方案 > 防止鼠标点击关闭菜单

问题描述

我有一个项目涉及为自动化目的创建虚拟鼠标。我希望能够在不以任何方式影响当前活动窗口的情况下用我的虚拟鼠标单击。

我已经设法通过在使用块输入 API 禁用输入之前保存当前鼠标位置和活动窗口来实现这一点。

然后我发送光标进行点击,将其放回原处并将前景设置为已保存的窗口并取消阻止输入。

这可以正常工作,但是如果上下文窗口打开,则当虚拟鼠标执行单击时窗口会关闭。

我查看了鼠标钩子,我还尝试全局检测上下文菜单,但找不到这样做的方法。

如果有人可以提供帮助,请与我联系,以便我可以从您的经验中学习。

提前致谢

问候,保罗。

标签: vb.netautomationhookcontextmenumouse

解决方案


您可以通过使用低级挂钩(不向前传递消息)或循环来实现这一点,就像这样->

<DllImport("user32.dll", EntryPoint:="PeekMessageA")>
Private Shared Function PeekMsg(
   ByRef msg As WinMsg, ByVal hw As IntPtr, filterMin As UInt16, filterMax As UInt16,
  ByVal remMsg As UInt16) As Boolean

End Function

<StructLayout(LayoutKind.Sequential)>
Private Structure WinMsg
    Dim hnd As UInt32
    Dim msgType As UInt32
    Dim wPmt As UInt32
    Dim lPmt As UInt32 
    Dim time1 As UInt32
    Dim pt As Point
    Dim iPrivate As UInt32
End Structure


'...
Dim msg As WinMsg
 PeekMsg(msg, Nothing, &H200, &H20D, 1) ' 1 on the end indicates that the message should be removed
'...

推荐阅读