using System.Runtime.InteropServices;class Win32Hook { [DllImport("kernel32")] public static extern int GetCurrentThreadId(); [DllImport("user32", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern int SetWindowsHookEx( HookType idHook, HOOKPROC lpfn, int hmod, int dwThreadId); public enum HookType { WH_KEYBOARD = 2, WH_MOUSE = 7 } public delegate int HOOKPROC(int nCode, int wParam, int lParam); public void SetHook() { //设置鼠标钩子 SetWindowsHookEx(HookType.WH_MOUSE, new HOOKPROC(this.MouseProc), 0, GetCurrentThreadId()); //设置键盘钩子 SetWindowsHookEx(HookType.WH_MOUSE, new HOOKPROC(this.KeyboardProc), 0, GetCurrentThreadId()); } public int KeyboardProc(int nCode, int wParam, int lParam) { //在这里放置你的处理代码 //不处理就到达了禁止的作用 return 1; } public int MouseProc(int nCode, int wParam, int lParam) { //在这里放置你的处理代码 //不处理就到达了禁止的作用 return 1; } } 可以在Form的构造函数里放入 Win32Hook hook = new Win32Hook(); hook.SetHook();
using System.Runtime.InteropServices;class Win32Hook
{
[DllImport("kernel32")]
public static extern int GetCurrentThreadId(); [DllImport("user32",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(
HookType idHook,
HOOKPROC lpfn,
int hmod,
int dwThreadId); public enum HookType
{
WH_KEYBOARD = 2,
WH_MOUSE = 7
} public delegate int HOOKPROC(int nCode, int wParam, int lParam); public void SetHook()
{
//设置鼠标钩子
SetWindowsHookEx(HookType.WH_MOUSE,
new HOOKPROC(this.MouseProc),
0,
GetCurrentThreadId());
//设置键盘钩子
SetWindowsHookEx(HookType.WH_MOUSE,
new HOOKPROC(this.KeyboardProc),
0,
GetCurrentThreadId());
} public int KeyboardProc(int nCode, int wParam, int lParam)
{
//在这里放置你的处理代码
//不处理就到达了禁止的作用
return 1;
}
public int MouseProc(int nCode, int wParam, int lParam)
{
//在这里放置你的处理代码
//不处理就到达了禁止的作用
return 1;
}
}
可以在Form的构造函数里放入
Win32Hook hook = new Win32Hook();
hook.SetHook();
FindWindow我也考虑过,但是类似按键精灵的软件挺多,我想最好能有个一劳永逸(起码可以顶的长久点)的方法
WH_KEYBOARD_LL
可以判断键盘消息的来源 如是来源是LLKHF_INJECTED
就说明不是由硬件产生的而是其它的键盘事件
但我在C#不能直接用 可是有因为C#是托管的原因 但我用C++实际了 禁止了"按键精灵"
我写了一个DLL 放到C#中也好用了 别的软件没测试 但"按键精灵"肯定没问题
如果这个解决方案可以
给我你的E-mail 我给你Dll 和Dll的源码