如何获得鼠标滚轮状态?

时间:2013-06-27 18:34:27

标签: c# mouseevent

在Microsoft.NET Framework中,名称空间中有一个名为System.Windows.Forms的Form类,并且在那里定义了许多事件。事件KeyPressed发生在键盘上按下键时,表单本身具有输入焦点。但是如果我想要在任何时候按下某个键时会发生某些事情,无论Form是否有输入焦点,我知道我可以运行一个计时器,并从user32.dll中输入GetKeyState或GetAsyncKeyState函数,并知道当任何时候按下一把钥匙。

我可以用Form的MouseDown事件使用鼠标做同样的事情,使用相同的user32.dll函数和一个计时器,但是当我向上或向下滚动鼠标滚轮时,我可以编程一些事情会发生在Form的MouseDown事件。

Delta是MouseEventArgs上鼠标滚轮事件的值,但它不仅在鼠标滚轮向上或向下滚动时出现,而且还需要使用MouseEvent在该窗体上输入焦点。

我不想依赖任何表格。我不知道给GetKeyState或GetAsyncKeyState函数提供哪个整数来获取鼠标滚轮的状态,所以我可以在一个定时器频繁调用的函数中运行一段代码。

我该怎么办?它是哪个整数? user32或其他dll还有其他函数可以返回“Delta”吗? 如果我知道,我会很高兴,所以请回答! :d

2 个答案:

答案 0 :(得分:2)

有一个非常好的CodePlex library可以让您轻松获得Global Mouse和KeyBoard事件。

以上链接描述:

  

此库允许您点击键盘和鼠标,即使应用程序处于非活动状态并在后台运行,也可以检测并记录其活动。

     

此库附加到Windows全局钩子,跟踪键盘和鼠标点击和移动,并使用KeyEventArgs和MouseEventArgs引发常见的.NET事件,因此您可以轻松检索所需的任何信息:鼠标坐标

  • 点击鼠标按钮
  • 鼠标滚轮
  • 按键和释放
  • 特殊关键状态

示例(从演示程序修改)它只会给你Delta:

using System;
using System.Windows.Forms;
using MouseKeyboardActivityMonitor;
using MouseKeyboardActivityMonitor.WinApi;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private readonly MouseHookListener m_MouseHookManager;

        public Form1()
        {
            InitializeComponent();

            m_MouseHookManager = new MouseHookListener(new GlobalHooker());
            m_MouseHookManager.Enabled = true;

            m_MouseHookManager.MouseWheel += HookManager_MouseWheel;

        }

        private void HookManager_MouseWheel(object sender, MouseEventArgs e)
        {
            labelWheel.Text = string.Format("Wheel={0:000}", e.Delta);
        }
    }
}

答案 1 :(得分:0)

您可以通过“添加引用”工具将以下文件添加到项目中: Microsoft.DirectX.dllMicrosoft.DirectX.DirectInput.dll,然后在代码中添加两个命名空间:"使用Microsoft.DirectX;"和#34;使用Microsoft.DirectX.DirectInput;"。

可以在您的计算机中找到这些文件:

  • 它们位于驱动器C中。
  • 路径是:Windows => Microsoft.NET => DirectX for Managed Code => 1.0.2902.0
  • 您可以点击键盘上的字母以更快地找到每个文件夹或目录。
  • 您可以使用“我的电脑”中的“搜索”工具查找它们的确切位置,或验证它们是否存在于您的计算机中。如果没有,那么您可以从互联网上下载它们,并在任何地方找到它们。

完成上述所有步骤后,您可以通过选择为其提供SystemGuid.Mouse的重载构造函数,在代码中的任何位置创建类型为Device的新全局实例。然后在Main函数中,您必须调用之前创建的全局Device实例的Acquire()函数。

在那之后获得" Delta"没有问题。全局鼠标。只需求助于Device的全局实例,从他那里获取CurrentMouseState,然后询问Z属性值,它是一个整数结构(int或System.Int32)。这正是鼠标" Delta"。 Z> 0 =鼠标滚轮向上滚动,Z< 0 =鼠标滚轮向下滚动,Z == 0 =鼠标滚轮现在没有滚动。

注意:在项目中使用Microsoft.DirectX要求您在Project Properties中的4.0版本下定位.NET框架,因为它不支持它。如果您忘记进行此更改,您将面临问题!

相关问题