示例:完整的键盘钩子public class WindowsHook
{
private int hookcount = 0;
private StandardCheck mCheck = new com.uncnet.GSPMgr.Common.StandardCheck();
public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam); //声明API函数:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid);
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern bool UnhookWindowsHookEx(IntPtr hhook);
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam); [DllImport("kernel32.dll", ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern int GetCurrentThreadId(); private IntPtr iHookHandle=IntPtr.Zero;
private GCHandle _hookProcHandle;
//这个是表明Hook的种类是键盘Hook
private const int WH_KEYBOARD = 2;
//控制键
private const int VK_CONTROL =0x7b; public WindowsHook( )
{
//
// TODO: 在此处添加构造函数逻辑
//
} //解键盘HOOK函数
public void UnHookKBD()
{
try
{
if (iHookHandle!=IntPtr.Zero)
UnhookWindowsHookEx(iHookHandle);
_hookProcHandle.Free();
iHookHandle = IntPtr.Zero;
}
catch
{
return;
}
}
//设置键盘HOOK
public void EnableKBDHook()
{
HookProc hookProc = new HookProc(MyKBHFunc);
_hookProcHandle = GCHandle.Alloc(hookProc);
iHookHandle = SetWindowsHookEx(WH_KEYBOARD, hookProc, IntPtr.Zero, GetCurrentThreadId());
if (iHookHandle == IntPtr.Zero) throw new System.Exception("没有足够权限安装钩子!");
} public IntPtr MyKBHFunc(int iCode , IntPtr wParam,IntPtr lParam)
{
if( hookcount > 0 )
{
if( hookcount == 2 )
hookcount = 0;
else
hookcount++;
return (IntPtr)0;
} if ((int)wParam ==VK_CONTROL )
{
hookcount ++;
UnHookKBD(); mCheck.SingleCheck( MainFormXP.ActiveForm );
mCheck.Lose(); EnableKBDHook();
return CallNextHookEx(iHookHandle, iCode, wParam, lParam);
}
return (IntPtr)0;
}
{
private int hookcount = 0;
private StandardCheck mCheck = new com.uncnet.GSPMgr.Common.StandardCheck();
public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam); //声明API函数:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid);
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern bool UnhookWindowsHookEx(IntPtr hhook);
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam); [DllImport("kernel32.dll", ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern int GetCurrentThreadId(); private IntPtr iHookHandle=IntPtr.Zero;
private GCHandle _hookProcHandle;
//这个是表明Hook的种类是键盘Hook
private const int WH_KEYBOARD = 2;
//控制键
private const int VK_CONTROL =0x7b; public WindowsHook( )
{
//
// TODO: 在此处添加构造函数逻辑
//
} //解键盘HOOK函数
public void UnHookKBD()
{
try
{
if (iHookHandle!=IntPtr.Zero)
UnhookWindowsHookEx(iHookHandle);
_hookProcHandle.Free();
iHookHandle = IntPtr.Zero;
}
catch
{
return;
}
}
//设置键盘HOOK
public void EnableKBDHook()
{
HookProc hookProc = new HookProc(MyKBHFunc);
_hookProcHandle = GCHandle.Alloc(hookProc);
iHookHandle = SetWindowsHookEx(WH_KEYBOARD, hookProc, IntPtr.Zero, GetCurrentThreadId());
if (iHookHandle == IntPtr.Zero) throw new System.Exception("没有足够权限安装钩子!");
} public IntPtr MyKBHFunc(int iCode , IntPtr wParam,IntPtr lParam)
{
if( hookcount > 0 )
{
if( hookcount == 2 )
hookcount = 0;
else
hookcount++;
return (IntPtr)0;
} if ((int)wParam ==VK_CONTROL )
{
hookcount ++;
UnHookKBD(); mCheck.SingleCheck( MainFormXP.ActiveForm );
mCheck.Lose(); EnableKBDHook();
return CallNextHookEx(iHookHandle, iCode, wParam, lParam);
}
return (IntPtr)0;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货