问题标签 [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.

0 投票
2 回答
1934 浏览

.net - 使用 .NET 挂钩应用程序以捕获双击事件

如何挂钩一个应用程序,以便我可以找出鼠标在其中双击的时间?

这可以在.NET中完成吗?

有什么我需要注意的吗?(例如,使其他应用程序崩溃)

0 投票
1 回答
330 浏览

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 滚动(更常用的命令)。

0 投票
2 回答
4944 浏览

c++ - MouseProc 钩子和 WM_LBUTTONDBLCLK

我有一个钩子设置,用于在我开发的插件中获取鼠标事件。我需要得到WM_LBUTTONDBLCLK,并且我希望消息流是:

WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK

如果我在处理第一个时调用下一个钩子WM_LBUTTONDOWN,那么流程就像预期的那样。但是,如果我返回自己的结果,那么预期的双击会作为鼠标按下消息出现。知道为什么会这样吗?我需要在处理完消息后停止消息,而不是将其传递给下一个钩子。

0 投票
6 回答
2920 浏览

c++ - SetWindowsHook 在一段时间后停止工作

我在 WM_MOUSE 上定义了一个全局钩子,它可以完美运行一段时间。每次鼠标移动时,它都会向特定窗口发布一条消息。

随机时间后,钩子停止发送消息。如果我取消注册并注册钩子,它会再次工作。我想在 Windows 中发生的某些特定事情会导致钩子停止,但我找不到什么。

有任何想法吗 ?

编辑:当钩子不再活动时,我将调试器附加到其他进程,并且我观察到不再加载 dll。

什么可能导致挂钩 dll 卸载?

Edit2:我发现 MouseHookProc 中的崩溃,任何进程中的 dll 从它加载的每个进程中卸载钩子 dll。我找不到导致代码崩溃的原因。可能是一些比赛条件或什么?这是钩子dll代码:

0 投票
1 回答
1522 浏览

.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.WriteLineDebug.WriteLine.

创建两个表格,Form1DropDown

(1) VB.NET

Form1中,添加一个 Button、Label 和 TextBox,以及以下代码。

在 DropDown 中,放置以下代码。

(2) C#

在 Form1 中添加一个 Button、Label 和 TextBox,以及以下代码:

在 DropDown 中,放置以下代码:

0 投票
2 回答
409 浏览

.net - 确定鼠标钩子何时处理了最后一条消息

我有一个表单,它就像一个下拉菜单,我显示非模态。我在表单上附加了一个鼠标钩子,以确定何时从表单中单击鼠标,以便我知道关闭它 - 通过设置Visible = False.

因为我希望HookProc处理最后一次单击,所以在确定我的事件处理程序已返回到 HookProc 之前,我无法处理 Hook 或我的 Dropdown。

这有点难以解释,但我希望下面的代码让它更清楚一点:-

0 投票
1 回答
419 浏览

winapi - 如果设置了鼠标钩子,则关闭窗口会延迟

如果我设置了一个低级鼠标钩子,WH_MOUSE_LL
我单击[x](关闭)按钮时,窗口会延迟约 500 毫秒,然后消失。

你知道导致延迟的原因吗?而且,有办法解决吗?

(窗口和钩子是通过直接调用 C++ 中的 win32 api 创建的)

0 投票
6 回答
2068 浏览

c# - C#:按下鼠标左/右键时如何获取鼠标的坐标?

按下鼠标左/右键时如何获取鼠标的坐标?

我正在使用低级鼠标钩子并且能够获取光标的当前位置,但我希望能够在按下任何鼠标按钮时检索该位置。

我怎样才能做到这一点?

0 投票
3 回答
1820 浏览

c# - PInvokeStackImbalance - 从 HookCallback 调用非托管代码

我的目标

我想将左键单击转换为右键单击

我的方法

  • 我通过 SetWindowsHookEx (user32.dll) 注册了一个低级挂钩
  • 过滤鼠标左键
  • 检查我是否要翻译特定的点击
  • 如果我真的想
    • 不要传递消息
    • 通过 mouse_event 创建一个新的鼠标点击(user32.dll 也是)

问题

当我做这样描述的事情时:

对 mouse_event 的调用失败并出现 PInvokeStackImbalance-Exception,我想,我应该关心一下。

DLLImports

因为通常 PInvokeStackImbalance 是由于不正确的导入签名而出现的,这里是我的:

紧急情况

在这种情况下,我隔离问题的常规方法会失败 - 因为 mouse_event-call 本身有效,并且左键单击的垃圾也有效。当结构超过部分的总和时,我讨厌它......

0 投票
2 回答
11969 浏览

c# - 如何使用 C# 在系统范围内禁用鼠标单击事件?

我有一台带有非常灵敏的触摸板的笔记本电脑,并且想编写一个小程序,该程序可以在我键入文件或其他内容时阻止鼠标输入。

考虑到我在低级钩子上看到的所有内容,我认为这并不难,但我错了(令人震惊,对吗?)。

我查看了一些示例,但我看到的示例要么阻止了键盘和鼠标,要么只是隐藏了鼠标。

对此的任何帮助都会很棒。