首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Winform应用程序_怎么屏蔽键盘输入 顶着有分

2012-03-18 
Winform应用程序_如何屏蔽键盘输入 顶着有分我现在做的WINFORM程序需要屏蔽掉键盘操作(点击键盘上的所有按

Winform应用程序_如何屏蔽键盘输入 顶着有分
我现在做的WINFORM程序需要屏蔽掉键盘操作(点击键盘上的所有按键都没效果),请问该如何实现呢?

[解决办法]
重写窗体 protected override void WndProc(ref Message m)
过滤掉键盘消息
[解决办法]
http://topic.csdn.net/t/20041220/21/3661867.html
[解决办法]
感觉是不是应该重写键盘钩子啊
[解决办法]
http://topic.csdn.net/u/20091216/12/a9e83cfc-0c21-44d7-9ebe-1936746f34d9.html?46213
[解决办法]
首先创建一个类,继承Form。然后重写WndProc方法。

C# code
         protected override void WndProc(ref Message m)         {            if (m.Msg != 0x0100)              base.WndProc(ref m);         }
[解决办法]
C# code
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Reflection; using System.Diagnostics; using Microsoft.Win32; namespace WindowsApplication1 {     public partial class Form2 : Form     {         //委托         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));                 if (kbh.vkCode == 91)  // 截获左win(开始菜单键)                 {                     return 1;                 }                 if (kbh.vkCode == 92)// 截获右win                 {                     return 1;                 }                 if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control) //截获Ctrl+Esc                 {                     return 1;                 }                 if (kbh.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt)  //截获alt+f4                 {                     return 1;                 }                 if (kbh.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+tab                 {                     return 1;                 }                 if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Shift) //截获Ctrl+Shift+Esc                 {                     return 1;                 }                 if (kbh.vkCode == (int)Keys.Space && (int)Control.ModifierKeys == (int)Keys.Alt)  //截获alt+空格                 {                     return 1;                 }                 if (kbh.vkCode == 241)                  //截获F1                 {                     return 1;                 }                 if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt + (int)Keys.Delete)      //截获Ctrl+Alt+Delete                 {                     return 1;                 }                 //if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Shift)      //截获Ctrl+Shift                 //{                 //    return 1;                 //}                               //if (kbh.vkCode == (int)Keys.Space && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt)  //截获Ctrl+Alt+空格                 //{                 //    return 1;                 //}             }             return CallNextHookEx(hHook, nCode, wParam, lParam);         }         #endregion         public Form2()         {             InitializeComponent();         }                 private void Form2_Load(object sender, EventArgs e)         {             Hook_Start();             //通过修改注册表来屏蔽任务管理器             //try             //{             //    RegistryKey r = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);             //    r.SetValue("DisableTaskMgr", "1");  //屏蔽任务管理器             //}             //catch             //{             //    RegistryKey r = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");             //    r.SetValue("DisableTaskMgr", "0");             //}         }         private void Form2_FormClosing(object sender, FormClosingEventArgs e)         {             Hook_Clear();         }         private void Form2_MouseMove(object sender, MouseEventArgs e)         {             System.Windows.Forms.Cursor.Clip = new Rectangle(this.Location, this.Size); //控制鼠标在窗口范围内         }     } } 


[解决办法]
你是要屏蔽WINFROM中的某一个控件,还是整个WINFROM,如果是某一个控件的话可以用事件,如果是整个WINFROM可能要用到钩子~
[解决办法]

C# code
 private void textBox1_KeyDown(object sender, KeyEventArgs e)        {            if (e.KeyData != Keys.None)            {                e.SuppressKeyPress = true;            }        }
[解决办法]
探讨
引用:

C# code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.……

[解决办法]
只要获取键的as码,然后都屏蔽掉,只要判断键盘输入了,就让他结束好了。不要那么复杂!
[解决办法]
控件设为只读就行了撒
[解决办法]
win alt tab等系统按键,必须通过hook键盘消息才能实现屏蔽。
具体代码网上找找吧,hook键盘消息应该很多的
[解决办法]
加上这段代码,保你能屏蔽键盘事件,能的话多给几分,不能的话,就别给了!!!
C# code
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)        {                        return true;        }
[解决办法]
楼上的方法应该能行吧
[解决办法]
http://www.javaeye.com/topic/601061

http://topic.csdn.net/u/20080320/23/576bd398-4804-40be-9886-9afb18ee5cf9.html
[解决办法]
你到底是要屏蔽系统的还是你自己程序的?
[解决办法]
http://blog.sina.com.cn/s/blog_60ddd93f0100ey4l.html

[解决办法]
钩子

热点排行