1

我的目标是制作一个浮动工具栏(作为它自己的 C# 应用程序),当用户在我身上使用滚轮时,我想更改可见的按钮。听起来很容易,应该只是这个单行的问题:

MouseWheel += new MouseEventHandler(Form1_MouseWheel);

我遇到的问题是鼠标滚轮处理程序仅在我的应用程序具有焦点时才被调用。这意味着用户必须先单击,然后再单击鼠标滚轮。这对我正在尝试做的事情不起作用。

我可以挂钩 MouseHover 事件处理程序,然后调用 form.Activate() 以获得焦点。这是次优的,因为如果用户在将鼠标悬停在我的应用程序上后立即使用滚轮(而不是稍等片刻),焦点仍将位于前一个应用程序上,并且它会获得鼠标滚轮事件。

很自然的做法是挂钩 MouseEnter 事件并在那里调用 Activate(),但随后我的应用程序并没有出现在前面,而是它的图标开始在任务栏上闪烁。我正在使用Win7,但这个问题可能比这更老。

理想情况下,我想做的是检测鼠标滚轮事件,而不必担心我的应用程序是否有焦点。以前的应用程序保持输入焦点确实会更好,例如,如果用户在记事本中,他们可以键入,将鼠标悬停到我的应用程序,使用滚轮,查看他们看到的内容并决定继续在记事本中输入. 理想情况下,我不希望他们在这种情况下甚至必须单击一次。

不过,如果没有其他方法,我会选择一个将焦点转移到我的应用程序的解决方案。

到目前为止,我使用 C# 和 Windows 窗体,但如果可以解决我的问题,我愿意使用不同的东西。

那么:我如何才能看到那些鼠标滚轮事件而无需用户先单击以聚焦我的应用程序?

4

1 回答 1

2

如果您需要在应用程序之外捕获鼠标事件,您可以使用全局系统挂钩。这里有一个很好的 .NET 实现

于 2009-09-23T15:29:51.560 回答