在c#中完全禁用鼠标移动和点击

时间:2010-04-23 13:00:46

标签: c# mouse

在工作中,我是一名教练。我正在上课,教人们如何在没有鼠标的情况下“做东西”...曾见过人们点击“登录”文本框,键入,抓住鼠标,单击“密码”,输入密码,然后再次抓取鼠标点击下面的“连接”按钮?

所以我会教他们如何在没有鼠标的情况下做到这一切(当然还有很多其他事情)

在课程结束时,我会让他们通过某种考试。

所以我正在构建一个基于向导的小应用程序,其中我提供了一些类似实例的表单填写,但我想在进行此测试时以编程方式禁用鼠标。

然而,在向导中,我将不得不让他们再次使用鼠标。

是否有一种 - 可能很简单 - 暂时禁用鼠标的方法,稍后重新启用它?

我正在使用C#2.0,在VC#2k5下进行编程,如果重要的话

4 个答案:

答案 0 :(得分:8)

制作表单工具IMessageFilter

然后将以下代码添加到表单中:

    Rectangle BoundRect;
    Rectangle OldRect = Rectangle.Empty;

    private void EnableMouse()
    {
        Cursor.Clip = OldRect;
        Cursor.Show();
        Application.RemoveMessageFilter(this);
    }
    public bool PreFilterMessage(ref Message m)
    {
        if (m.Msg == 0x201 || m.Msg == 0x202 || m.Msg == 0x203) return true;
        if (m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206) return true;
        return false;
    }
    private void DisableMouse()
    {
        OldRect = Cursor.Clip;
        // Arbitrary location.
        BoundRect = new Rectangle(50, 50, 1, 1); 
        Cursor.Clip = BoundRect;
        Cursor.Hide();
        Application.AddMessageFilter(this);
    }  

这将隐藏光标,使其无法移动光标并禁用鼠标右键和左键。

答案 1 :(得分:2)

您正在寻找Cursor.Hide() method

请注意,光标仍然可以移动,它只是不可见 如果您在启用视觉样式的情况下运行,则仍可以通过跟踪悬停效果来使用鼠标 但是,任何能够做到这一点的人都可能不需要你的课程。

执行此操作的更“有趣”的方法是处理MouseMove事件并设置Cursor.Position以防止鼠标移动到您的面板中。

答案 2 :(得分:1)

如何采用不同的方法(想出“必须为所有内容编写解决方案”框):在开始上课之前,断开所有鼠标的连接......让他们在需要再次使用鼠标时重新连接它。 / p>

答案 3 :(得分:1)

Imho最简单的方法是PInvoke ShowCursor(FALSE)函数(参见http://msdn.microsoft.com/en-us/library/ms648396.aspx

[DllImport("user32.dll")]
static extern int ShowCursor(bool bShow);

编辑:如果您使用的是Windows窗体,这相当于调用Cursor.Hide()(http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.hide(v=VS.100).aspx)。