重写窗体 protected override void WndProc(ref Message m) 过滤掉键盘消息
首先添加一个类库using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Reflection;public delegate int HOOKPROC(int code, IntPtr wparam, IntPtr lparam); public class Hook { [DllImport("user32.dll")] public static extern IntPtr SetWindowsHookEx(int Type, HOOKPROC lpfn, IntPtr hmod, int dwThreadId); [DllImport("User32.dll")] public extern static int CallNextHookEx(IntPtr handle, int code, IntPtr wparam, IntPtr lparam); public IntPtr SetHook(HOOKPROC method) { return SetWindowsHookEx(13, method, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); } }然后应用上面的类库 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;namespace ConsoleApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } IntPtr hand; private void Form1_Load(object sender, EventArgs e) { Hook h = new Hook(); HOOKPROC method = new HOOKPROC(Dispose); hand = h.SetHook(method); } private int Dispose(int code, IntPtr wparam, IntPtr lparam) { if (code != 0) return Hook.CallNextHookEx(hand, code, wparam, lparam); KeyBoardHookStruct kbhs = (KeyBoardHookStruct)Marshal.PtrToStructure(lparam, typeof(KeyBoardHookStruct)); if (wparam == (IntPtr)256) { Console.WriteLine(kbhs.vkCode); if (kbhs.vkCode == 162 || kbhs.vkCode == 91 || kbhs.vkCode == 46) return 1; } return 0; } } public struct KeyBoardHookStruct { public int vkCode; public int scanCode; public int flags; public int time; public int dwExtraInfo; } }对于 ctrl+alt+del 还不能屏蔽 只能屏蔽win键
过滤掉键盘消息
{
if (m.Msg != 0x0100)
base.WndProc(ref m);
}
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); //控制鼠标在窗口范围内
}
}
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData != Keys.None)
{
e.SuppressKeyPress = true;
} }
具体代码网上找找吧,hook键盘消息应该很多的
{
return true;
}
顶
{
if (keyData == Keys.Enter)
{
SendKeys.Send("{Tab}"); return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}我这个是当键盘按下回车时执行Tab键的操作。希望能给楼主一些启发。
查下API就知道了.
过滤掉键盘消息
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Reflection;public delegate int HOOKPROC(int code, IntPtr wparam, IntPtr lparam);
public class Hook
{
[DllImport("user32.dll")]
public static extern IntPtr SetWindowsHookEx(int Type, HOOKPROC lpfn, IntPtr hmod, int dwThreadId);
[DllImport("User32.dll")]
public extern static int CallNextHookEx(IntPtr handle, int code, IntPtr wparam, IntPtr lparam); public IntPtr SetHook(HOOKPROC method)
{
return SetWindowsHookEx(13, method, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
}
}然后应用上面的类库
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;namespace ConsoleApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} IntPtr hand;
private void Form1_Load(object sender, EventArgs e)
{
Hook h = new Hook();
HOOKPROC method = new HOOKPROC(Dispose);
hand = h.SetHook(method);
}
private int Dispose(int code, IntPtr wparam, IntPtr lparam)
{
if (code != 0)
return Hook.CallNextHookEx(hand, code, wparam, lparam);
KeyBoardHookStruct kbhs = (KeyBoardHookStruct)Marshal.PtrToStructure(lparam, typeof(KeyBoardHookStruct));
if (wparam == (IntPtr)256)
{
Console.WriteLine(kbhs.vkCode);
if (kbhs.vkCode == 162 || kbhs.vkCode == 91 || kbhs.vkCode == 46)
return 1;
}
return 0;
}
}
public struct KeyBoardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
}对于 ctrl+alt+del 还不能屏蔽 只能屏蔽win键