vb.net - 防止鼠标点击关闭菜单
问题描述
我有一个项目涉及为自动化目的创建虚拟鼠标。我希望能够在不以任何方式影响当前活动窗口的情况下用我的虚拟鼠标单击。
我已经设法通过在使用块输入 API 禁用输入之前保存当前鼠标位置和活动窗口来实现这一点。
然后我发送光标进行点击,将其放回原处并将前景设置为已保存的窗口并取消阻止输入。
这可以正常工作,但是如果上下文窗口打开,则当虚拟鼠标执行单击时窗口会关闭。
我查看了鼠标钩子,我还尝试全局检测上下文菜单,但找不到这样做的方法。
如果有人可以提供帮助,请与我联系,以便我可以从您的经验中学习。
提前致谢
问候,保罗。
解决方案
您可以通过使用低级挂钩(不向前传递消息)或循环来实现这一点,就像这样->
<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
'...
推荐阅读
- vue.js - 从子组件更改事件 v-data-table 行的背景
- javascript - devops-rest APi - $expand 不适用于“Work Items - Get Work Items Batch”
- oracle-apex - Oracle APEX - 查找包含特定区域类型的页面
- mysql - 更新对象时重复的键条目
- python - 如何将时间戳转换为日期?
- java - 使用java检查datalake中是否存在文件夹
- python - 从私有 PyPI 定义 setup.py 依赖项
- mysql - 如何将一列添加到表中,它结合了其他列中的字符串?
- dictionary - Ansible vars 不替换字典中的变量
- json - 基于数据类型而不是数据值的 Pact Consumer / Provider