2013-10-01 146 views
0


我正在开发一个基于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); 
    } 

但如何外面捕捉鼠标点击事件我的应用程序的形式?

+0

凯饶balach cheshta karata KA aamachi –

+3

蛋糕上的结冰会在每次尝试时弹出一个对话框。 –

+2

阅读关于鼠标钩... http://msdn.microsoft.com/en-us/library/windows/desktop/ms644959%28v=vs.85%29.aspx – tim

回答

2

这样就可以做到。它使用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); 
     } 
    } 
} 
+1

嗨迈克,谢谢你...你只是挽救了我奋斗的日子...... – zeetit