2024年4月26日发(作者:)

//屏蔽键盘

using System;

using c;

using ;

using pServices;

using ;

using tion;

namespace KeyboardDLL

{

public class KeyboardHook

{

public delegate int KeyboardProc(int nCode, IntPtr wParam,

IntPtr lParam);

static int hKeyboardHook = 0;

KeyboardProc KeyboardHookProcedure;

///

/// 钩子函数,需要引用空间(using tion;)

/// 线程钩子监听键盘消息设为2,全局钩子监听键盘消息设为13

/// 线程钩子监听鼠标消息设为7,全局钩子监听鼠标消息设为14

///

public const int WH_KEYBOARD = 13;

public const int WH_MOUSE_LL = 14;

public struct KeyboardMSG

{

public int vkCode;

public int scanCode;

public int flags;

public int time;

public int dwExtraInfo;

public int VK_CONTROL;

public int VK_MENU;

public int VK_DELETE;

}

///

/// 是Windows 95,Windows 98和Windows Me中使用的

32位动态链接库文件。

/// 是负责内存管理、输入输出以及中断等工作。启动Windows

系统之后,

/// 就会被装载到不会被其他应用程序影响的受保护的内存空间

中。在某些时候,

/// 会出现invalid page fault(IPF)错误信息,这是由于其他应用程序视

图访问

/// 所在的受保护内存空间引起的。不过有时,特定的某些程序也能引起这种错

误。

///

///

[DllImport("kernel32")]

public static extern int GetCurrentThreadId();

[DllImport("", CharSet = ,

CallingConvention = l)]

public static extern int SetWindowsHookEx(int idHook,

KeyboardProc lpfn, IntPtr hInstance, int threadId);

[DllImport("", CharSet = ,

CallingConvention = l)]

public static extern bool UnhookWindowsHookEx(int idHook);

[DllImport("", CharSet = ,

CallingConvention = l)]

public static extern int CallNextHookEx(int idHook, int nCode,

IntPtr wParam, IntPtr lParam);

private int KeyboardHookProc(int nCode, IntPtr wParam, IntPtr

lParam)

{

KeyboardMSG m =

(KeyboardMSG)tructure(lParam, typeof(KeyboardMSG));

if ((int) == 91 || (int) == 92

||(int) == 10)

{

return 1;

}

if (((int) == 46) && ((int) == 17) &&

((int) == 18))

{

return 2;

}

if ((int) == 20)

{

return 1;

}

if (1 == 1)

{

return 1;

}

return CallNextHookEx(hKeyboardHook, nCode, wParam,

lParam);

}

// 安装钩子

public void KeyMaskStart()

{

if (hKeyboardHook == 0)

{

// 创建HookProc实例

KeyboardHookProcedure

KeyboardProc(KeyboardHookProc);

= new

// 设置线程钩子

hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD,

KeyboardHookProcedure,

STANCE(cutingAssembly().GetModules()

[0]), 0);

// 如果设置钩子失败

if (hKeyboardHook == 0)

{

KeyMaskStop();

throw new Exception("SetWindowsHookEx failed.");

}

}

}

// 卸载钩子

public void KeyMaskStop()

{

bool retKeyboard = true;

if (hKeyboardHook != 0)

{

retKeyboard = UnhookWindowsHookEx(hKeyboardHook);

hKeyboardHook = 0;

}

if (!(retKeyboard))

{

throw new Exception("UnhookWindowsHookEx failed.");

}

}

}

}