锁定键盘鼠标锁定键盘鼠标,只留一个空格键有响应,其它都按键无反应?

解决方案 »

  1.   

    完全可以,我写过,用钩子
    API:SetWindowsHookEx
      

  2.   

    http://hi.baidu.com/libinguest/blog/item/da0ec5bf7a5e0a0318d81f5a.html
      

  3.   

    屏蔽键盘代码   protected override bool ProcessCmdKey(ref     Message msg, Keys keyData)
            {
                switch (keyData)
                {
                    case (System.Windows.Forms.Keys)(32):  //32为空格键的键值
                        break;
                    default:
                        return true ;
                }
                return false;
            }
      

  4.   

    别的就别乱说了,只有2楼的有理论可能。而且要屏蔽ctrl+alt+delete,必须要用C++才能做到。网上都有现成代码。
      

  5.   

    API函数锁定键盘及鼠标
    [DllImport("user32.dll")]
            static extern void BlockInput(bool Block); 
    或使用SetWindowsHookEx
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                switch (keyData)
                {
                    case (Keys.Space):
                        break;
                    default:
                        return true;
                }
                return base.ProcessCmdKey(ref msg, keyData);
            }http://topic.csdn.net/u/20090814/16/1865dafb-ac19-4569-9d75-5c146d4a5b8e.html
      

  6.   


    //委托 
            public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
            static int hHook = 0;
            public const int WH_KEYBOARD_LL = 13;        //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。 
            HookProc KeyBoardHookProcedure;        //键盘Hook结构函数 
            [StructLayout(LayoutKind.Sequential)]
            public class KeyBoardHookStruct
            {
                public int vkCode;
                public int scanCode;
                public int flags;
                public int time;
                public int dwExtraInfo;
            }        #region DllImport
            //设置钩子 
            [DllImport("user32.dll")]
            public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            //抽掉钩子 
            public static extern bool UnhookWindowsHookEx(int idHook);
            [DllImport("user32.dll")]
            //调用下一个钩子 
            public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);        [DllImport("kernel32.dll")]
            public static extern int GetCurrentThreadId();        [DllImport("kernel32.dll")]
            public static extern IntPtr GetModuleHandle(string name);        public void Hook_Start()
            {
                // 安装键盘钩子 
                if (hHook == 0)
                {
                    KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);                //hHook = SetWindowsHookEx(2, 
                    //            KeyBoardHookProcedure, 
                    //          GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), GetCurrentThreadId());                 hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
                              KeyBoardHookProcedure,
                            GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);                //如果设置钩子失败. 
                    if (hHook == 0)
                    {
                        Hook_Clear();
                        //throw new Exception("设置Hook失败!"); 
                    }
                }
            }        //取消钩子事件 
            public void Hook_Clear()
            {
                bool retKeyboard = true;
                if (hHook != 0)
                {
                    retKeyboard = UnhookWindowsHookEx(hHook);
                    hHook = 0;
                }
                //如果去掉钩子失败. 
                if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
            }        //这里可以添加自己想要的信息处理 
            public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
            {
                if (nCode >= 0)
                {
                    KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
                   // MessageBox.Show(kbh.vkCode.ToString());
                    
                    if (kbh.vkCode != 32)
                    {
                        return 1;
                    }  }
                return CallNextHookEx(hHook, nCode, wParam, lParam);
            }        #endregion 
    楼主 你然后用段时候 Hook_Start();  开启   (就可以锁定键盘除空格外的 按键)
    Hook_Clear();  关闭   (释放所有键盘按键)
      

  7.   

    屏蔽鼠标消息案例:using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;namespace MyProg
    {
    /// <summary>
    /// Form1 的摘要说明。
    /// </summary>
    public class Form1 : System.Windows.Forms.Form,IMessageFilter
    {
    public bool PreFilterMessage(ref System.Windows.Forms.Message SystemMessage)
    {
    if (SystemMessage.Msg >= 513 && SystemMessage.Msg <= 515) 
    {//不响应鼠标左键消息
    return true;
    }
    return false;
    }
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.Button button2;
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.Container components = null; public Form1()
    {
    //
    // Windows 窗体设计器支持所必需的
    //
    InitializeComponent(); //
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
    //
    } /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if (components != null) 
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    } #region Windows 窗体设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.button1 = new System.Windows.Forms.Button();
    this.button2 = new System.Windows.Forms.Button();
    this.SuspendLayout();
    // 
    // button1
    // 
    this.button1.Location = new System.Drawing.Point(88, 40);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(136, 23);
    this.button1.TabIndex = 0;
    this.button1.Text = "禁止鼠标左键单击";
    this.button1.Click += new System.EventHandler(this.button1_Click);
    // 
    // button2
    // 
    this.button2.Location = new System.Drawing.Point(88, 80);
    this.button2.Name = "button2";
    this.button2.Size = new System.Drawing.Size(136, 23);
    this.button2.TabIndex = 1;
    this.button2.Text = "允许鼠标左键单击";
    this.button2.Click += new System.EventHandler(this.button2_Click);
    // 
    // Form1
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    this.ClientSize = new System.Drawing.Size(312, 150);
    this.Controls.Add(this.button2);
    this.Controls.Add(this.button1);
    this.MaximizeBox = false;
    this.Name = "Form1";
    this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
    this.Text = "演示屏蔽鼠标消息";
    this.ResumeLayout(false); }
    #endregion /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main() 
    {
    Application.Run(new Form1());
    } private void button1_Click(object sender, System.EventArgs e)
    {//禁止鼠标左键单击
    Application.AddMessageFilter(this);
    MessageBox.Show("鼠标左键已被禁止,请用Tab键执行操作!","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    } private void button2_Click(object sender, System.EventArgs e)
    {//允许鼠标左键单击
    Application.RemoveMessageFilter(this);
    MessageBox.Show("鼠标左键已解禁,可以执行操作!","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    }
    }
      

  8.   

    用C++写过,通过设置WH_KEYBOARD_LL钩子可以拦截大部分按键,要拦截ctrl+alt+del的话就要线程注入了。