当前位置:编程学习 > C#/ASP.NET >>

谁能帮我详细分析下,谢谢

using System;
using System.Reflection;
using System.Runtime.InteropServices;
public class HookKeyBoard
{
/// <summary>
/// d
/// </summary>
/// <param name="code"></param>
/// <param name="State"></param>
public delegate void HookKeyBoardEventHandler(KeyBoardHookStruct code, ref int State);
/// <summary>
/// s
/// </summary>
public event HookKeyBoardEventHandler HookKeyBoardHandler;


private static HookProc myhookProc;
IntPtr _nextHookPtr; //记录Hook编号 
[DllImport("kernel32.dll")]
static extern int GetCurrentThreadId(); //取得当前线程编号的API 

[DllImport("User32.dll")]
internal extern static void UnhookWindowsHookEx(IntPtr handle); //取消Hook的API 

[DllImport("User32.dll")]
internal extern static IntPtr SetWindowsHookEx(int idHook, [MarshalAs(UnmanagedType.FunctionPtr)] HookProc lpfn, IntPtr hinstance, int threadID); //设置Hook的API 

[DllImport("kernel32.dll")]
public static extern IntPtr GetModuleHandle(string name);

[DllImport("User32.dll")]
internal extern static IntPtr CallNextHookEx(IntPtr handle, int code, IntPtr wparam, IntPtr lparam); //取得下一个Hook的API 

internal delegate IntPtr HookProc(int code, IntPtr wparam, IntPtr lparam);


IntPtr MyHookProc(int code, IntPtr wparam, IntPtr lparam)
{

if (code < 0)
{
return CallNextHookEx(_nextHookPtr, code, wparam, lparam);//返回,让后面的程序处理该消息 }


int State = 0;//2 

var kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lparam, typeof(KeyBoardHookStruct));
HookKeyBoardHandler(kbh, ref State);

return (IntPtr) State;
}
/// <summary>
/// 开始执行
/// </summary>
public void SetHook()
{


if (_nextHookPtr != IntPtr.Zero) //已经勾过了 
return;
myhookProc = MyHookProc; //声明一个自己的Hook实现函数的委托对象 

_nextHookPtr = SetWindowsHookEx((int)HookType.KeyboardLL, myhookProc, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); //加到Hook链中 



}
public void UnHook()
{
if (_nextHookPtr != IntPtr.Zero)
{
UnhookWindowsHookEx(_nextHookPtr); //从Hook链中取消 
_nextHookPtr = IntPtr.Zero;
}
}
} --------------------编程问答-------------------- 太长了。 --------------------编程问答-------------------- 看看先
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,