c 语言鼠标钩子,C#编程钩子类 几乎捕获键盘鼠标所有事件(代码分析)

本文主要向大家介绍了C#编程钩子类 几乎捕获键盘鼠标所有事件(代码分析),通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

using System;

using System.Text;

using System.Runtime.InteropServices;

using System.Reflection;

using System.Windows.Forms;

namespace MouseKeyboardLibrary

{

///

/// Abstract base class for Mouse and Keyboard hooks

///

public abstract class GlobalHook

{

#region Windows API Code

[StructLayout(LayoutKind.Sequential)]

protected class POINT

{

public int x;

public int y;

}

[StructLayout(LayoutKind.Sequential)]

protected class MouseHookStruct

{

public POINT pt;

public int hwnd;

public int wHitTestCode;

public int dwExtraInfo;

}

[StructLayout(LayoutKind.Sequential)]

protected class MouseLLHookStruct

{

public POINT pt;

public int mouseData;

public int flags;

public int time;

public int dwExtraInfo;

}

[StructLayout(LayoutKind.Sequential)]

protected class KeyboardHookStruct

{

public int vkCode;

public int scanCode;

public int flags;

public int time;

public int dwExtraInfo;

}

[DllImport("user32.dll", CharSet = CharSet.Auto,

CallingConvention = CallingConvention.StdCall, SetLastError = true)]

protected static extern int SetWindowsHookEx(

int idHook,

HookProc lpfn,

IntPtr hMod,

int dwThreadId);

[DllImport("user32.dll", CharSet = CharSet.Auto,

CallingConvention = CallingConvention.StdCall, SetLastError = true)]

protected static extern int UnhookWindowsHookEx(int idHook);

[DllImport("user32.dll", CharSet = CharSet.Auto,

CallingConvention = CallingConvention.StdCall)]

protected static extern int CallNextHookEx(

int idHook,

int nCode,

int wParam,

IntPtr lParam);

[DllImport("user32")]

protected static extern int ToAscii(

int uVirtKey,

int uScanCode,

byte[] lpbKeyState,

byte[] lpwTransKey,

int fuState);

[DllImport("user32")]

protected static extern int GetKeyboardState(byte[] pbKeyState);

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

protected static extern short GetKeyState(int vKey);

protected delegate int HookProc(int nCode, int wParam, IntPtr lParam);

protected const int WH_MOUSE_LL = 14;

protected const int WH_KEYBOARD_LL = 13;

protected const int WH_MOUSE = 7;

protected const int WH_KEYBOARD = 2;

protected const int WM_MOUSEMOVE = 0x200;

protected const int WM_LBUTTONDOWN = 0x201;

protected const int WM_RBUTTONDOWN = 0x204;

protected const int WM_MBUTTONDOWN = 0x207;

protected const int WM_LBUTTONUP = 0x202;

protected const int WM_RBUTTONUP = 0x205;

protected const int WM_MBUTTONUP = 0x208;

protected const int WM_LBUTTONDBLCLK = 0x203;

protected const int WM_RBUTTONDBLCLK = 0x206;

protected const int WM_MBUTTONDBLCLK = 0x209;

protected const int WM_MOUSEWHEEL = 0x020A;

protected const int WM_KEYDOWN = 0x100;

protected const int WM_KEYUP = 0x101;

protected const int WM_SYSKEYDOWN = 0x104;

protected const int WM_SYSKEYUP = 0x105;

protected const byte VK_SHIFT = 0x10;

protected const byte VK_CAPITAL = 0x14;

protected const byte VK_NUMLOCK = 0x90;

protected const byte VK_LSHIFT = 0xA0;

protected const byte VK_RSHIFT = 0xA1;

protected const byte VK_LCONTROL = 0xA2;

protected const byte VK_RCONTROL = 0x3;

protected const byte VK_LALT = 0xA4;

protected const byte VK_RALT = 0xA5;

protected const byte LLKHF_ALTDOWN = 0x20;

#endregion

#region Private Variables

protected int _hookType;

protected int _handleToHook;

protected bool _isStarted;

protected HookProc _hookCallback;

#endregion

#region Properties

public bool IsStarted

{

get

{

return _isStarted;

}

}

#endregion

#region Constructor

public GlobalHook()

{

Application.ApplicationExit += new EventHandler(Application_ApplicationExit);

}

#endregion

#region Methods

public void Start()

{

if (!_isStarted &&

_hookType != 0)

{

// Make sure we keep a reference to this delegate!

// If not, GC randomly collects it, and a NullReference exception is thrown

_hookCallback = new HookProc(HookCallbackProcedure);

_handleToHook = SetWindowsHookEx(

_hookType,

_hookCallback,

Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),

0);

// Were we abl

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值