问题标签 [mouse-hook]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 使用 .NET 挂钩应用程序以捕获双击事件
如何挂钩一个应用程序,以便我可以找出鼠标在其中双击的时间?
这可以在.NET中完成吗?
有什么我需要注意的吗?(例如,使其他应用程序崩溃)
visual-studio-2010 - 我可以在应用程序的主循环之前抑制选定的输入吗?
作为我的 Visual Studio 实用程序插件SamTools的一部分,我有一个鼠标输入例程,它可以捕获 Ctrl+MouseWheel 并将 pageup/pagedown 命令发送到活动文本窗口。Visual Studio 2010 添加了一个新的“功能”,使用该手势进行放大/缩小(barf)。目前,我的加载项确实发送了滚动命令,但 Visual Studio 仍然会更改字体大小,因为我没有吃掉输入。
我打电话给SetWindowsHookEx
. 这是回调代码。我的问题是:当我按下 Ctrl 键获得鼠标滚轮事件时,防止 Visual Studio 将 Ctrl+MouseWheel 输入作为缩放命令处理的最佳方法是根本不调用吗?CallNextHookEx
(请记住,这是我的一些旧代码。):)
这是响应MouseWheel
事件执行的代码:
PS:SamTools 是开源的 (GPL) - 您可以从链接下载它,源代码在安装程序中。
PSS:Ctrl+[+] 和 Ctrl+[-] 更适合缩放。让 Ctrl+MouseWheel 滚动(更常用的命令)。
c++ - MouseProc 钩子和 WM_LBUTTONDBLCLK
我有一个钩子设置,用于在我开发的插件中获取鼠标事件。我需要得到WM_LBUTTONDBLCLK
,并且我希望消息流是:
WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK
如果我在处理第一个时调用下一个钩子WM_LBUTTONDOWN
,那么流程就像预期的那样。但是,如果我返回自己的结果,那么预期的双击会作为鼠标按下消息出现。知道为什么会这样吗?我需要在处理完消息后停止消息,而不是将其传递给下一个钩子。
c++ - SetWindowsHook 在一段时间后停止工作
我在 WM_MOUSE 上定义了一个全局钩子,它可以完美运行一段时间。每次鼠标移动时,它都会向特定窗口发布一条消息。
随机时间后,钩子停止发送消息。如果我取消注册并注册钩子,它会再次工作。我想在 Windows 中发生的某些特定事情会导致钩子停止,但我找不到什么。
有任何想法吗 ?
编辑:当钩子不再活动时,我将调试器附加到其他进程,并且我观察到不再加载 dll。
什么可能导致挂钩 dll 卸载?
Edit2:我发现 MouseHookProc 中的崩溃,任何进程中的 dll 从它加载的每个进程中卸载钩子 dll。我找不到导致代码崩溃的原因。可能是一些比赛条件或什么?这是钩子dll代码:
.net - .NET 和 Windows 窗体中鼠标钩子的奇怪行为
我有一个显示的表单,不是通过 ShowDialog,而是通过将其可见属性设置为 true。这样它的行为就像一个下拉菜单。
该表单安装了一个鼠标钩子,使用SetWindowsHookEx(WH_MOUSE, ...)
.
我检测是否在下拉列表之外单击了鼠标,如果是,则在我的HookProc
方法中返回 1 并关闭下拉列表。
奇怪的是,如果我在下拉列表之外单击文本框,则在我的下拉列表关闭后,文本框仍会收到鼠标单击,即使它已由我的HookProc
方法处理。
它变得陌生......如果我点击一个标签或按钮,他们没有收到鼠标点击,正如预期的那样,在下拉关闭后!
知道发生了什么吗?
预计到达时间 2:
您可以忽略下面我的所有代码,因为在进一步调查中,我发现这种行为至少表现在一个实现下拉类型表单的框架控件中。
要复制,创建一个表单并添加一个属性网格、按钮、文本框和标签。将属性网格的选定对象设置为字体。
运行表单并选择字体名称。出现一个下拉列表。现在单击表单的文本框。触发文本框单击事件。但是,按钮或标签不会发生同样的情况。
这是怎么回事?
预计到达时间 1:
下面是How to set a Windows hook in Visual C# .NET中的一些基本代码,以演示发生了什么。我使用转换器将代码转换回 C#,但希望没问题。我不确定,但您可能需要替换Console.WriteLine
为Debug.WriteLine
.
创建两个表格,Form1
和DropDown
。
(1) VB.NET
在Form1
中,添加一个 Button、Label 和 TextBox,以及以下代码。
在 DropDown 中,放置以下代码。
(2) C#
在 Form1 中添加一个 Button、Label 和 TextBox,以及以下代码:
在 DropDown 中,放置以下代码:
.net - 确定鼠标钩子何时处理了最后一条消息
我有一个表单,它就像一个下拉菜单,我显示非模态。我在表单上附加了一个鼠标钩子,以确定何时从表单中单击鼠标,以便我知道关闭它 - 通过设置Visible = False
.
因为我希望HookProc
处理最后一次单击,所以在确定我的事件处理程序已返回到 HookProc 之前,我无法处理 Hook 或我的 Dropdown。
这有点难以解释,但我希望下面的代码让它更清楚一点:-
winapi - 如果设置了鼠标钩子,则关闭窗口会延迟
如果我设置了一个低级鼠标钩子,WH_MOUSE_LL
当
我单击[x](关闭)按钮时,窗口会延迟约 500 毫秒,然后消失。
你知道导致延迟的原因吗?而且,有办法解决吗?
(窗口和钩子是通过直接调用 C++ 中的 win32 api 创建的)
c# - C#:按下鼠标左/右键时如何获取鼠标的坐标?
按下鼠标左/右键时如何获取鼠标的坐标?
我正在使用低级鼠标钩子并且能够获取光标的当前位置,但我希望能够在按下任何鼠标按钮时检索该位置。
我怎样才能做到这一点?
c# - PInvokeStackImbalance - 从 HookCallback 调用非托管代码
我的目标
我想将左键单击转换为右键单击
我的方法
- 我通过 SetWindowsHookEx (user32.dll) 注册了一个低级挂钩
- 过滤鼠标左键
- 检查我是否要翻译特定的点击
- 如果我真的想
- 不要传递消息
- 通过 mouse_event 创建一个新的鼠标点击(user32.dll 也是)
问题
当我做这样描述的事情时:
对 mouse_event 的调用失败并出现 PInvokeStackImbalance-Exception,我想,我应该关心一下。
DLLImports
因为通常 PInvokeStackImbalance 是由于不正确的导入签名而出现的,这里是我的:
紧急情况
在这种情况下,我隔离问题的常规方法会失败 - 因为 mouse_event-call 本身有效,并且左键单击的垃圾也有效。当结构超过部分的总和时,我讨厌它......
c# - 如何使用 C# 在系统范围内禁用鼠标单击事件?
我有一台带有非常灵敏的触摸板的笔记本电脑,并且想编写一个小程序,该程序可以在我键入文件或其他内容时阻止鼠标输入。
考虑到我在低级钩子上看到的所有内容,我认为这并不难,但我错了(令人震惊,对吗?)。
我查看了一些示例,但我看到的示例要么阻止了键盘和鼠标,要么只是隐藏了鼠标。
对此的任何帮助都会很棒。