【问题标题】:How to suppress global mouse click events from windows?如何抑制窗口中的全局鼠标单击事件?
【发布时间】:2013-10-01 11:58:23
【问题描述】:


我正在开发一个基于 Windows 的应用程序,我希望每当我的应用程序启动时,它都应该在我的应用程序窗口表单之外禁用鼠标单击事件。

谁能告诉我,我怎样才能做到这一点?

提前致谢。

编辑:
在表单中捕捉鼠标点击事件并抑制点击动作很容易,因为我们只使用这个:

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == (int)MouseMessages.WM_LBUTTONDOWN || m.Msg == (int)MouseMessages.WM_LBUTTONUP)
            MessageBox.Show("Click event caught!");  //return; --for suppress the click event action.
        else
            base.WndProc(ref m);
    }

但是如何在我的应用程序表单之外捕获鼠标点击事件?

【问题讨论】:

  • 锦上添花的是他们每次尝试都会弹出一个对话框。
  • 您需要通过 WH_MOUSE_LL 使用低级鼠标钩子并捕获 WM_LBUTTONDOWN 消息(以及其他需要的适当鼠标消息)。如果光标当前不在您的应用程序的范围内,那么您将通过在 hook procedure 中返回 1 来“抑制”该鼠标事件。
  • 你为什么不强制你的应用程序一直全屏显示?让来自其他应用程序或操作系统的 UI 元素可见(并响应鼠标悬停等),用户实际上无法点击,这至少会造成极大的混乱。除非你正在创建某种病毒/笑话程序,而这正是目的,当然......
  • 而且我认为你不能不深入到低级硬件 c++ 的东西。 vista 及更高版本的消息队列不是全局的,而是每个应用程序私有的。

标签: c# .net winforms events click


【解决方案1】:

这样就可以了。它使用win API函数BlockInput

注意:CTRL + ALT + DELETE 再次启用输入。但其他鼠标和键盘输入被阻止。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern void BlockInput([In, MarshalAs(UnmanagedType.Bool)]bool fBlockIt);

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Show();
            //Blocks the input
            BlockInput(true);
            System.Threading.Thread.Sleep(5000);
            //Unblocks the input
            BlockInput(false); 
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-25
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2011-09-01
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多