日期:2014-05-18  浏览次数:21271 次

钩子程序 HookCallback 怎么写?
protected override int HookCallback(int nCode, int wParam, IntPtr lParam)
{
  //这里怎么写
}

------解决方案--------------------
找找
------解决方案--------------------
这玩意不要恶搞哦 ~
------解决方案--------------------
参考:
http://blog.csdn.net/shixin1198/archive/2007/03/13/1527943.aspx
------解决方案--------------------
下面是开源的DockPanel套件中,处理鼠标消息钩子的一个Hook类,搂主可以参考:
C# code
using System; 
using System.Runtime.InteropServices;

namespace WeifenLuo.WinFormsUI
{
internal class HookEventArgs : EventArgs
{
public int HookCode;  // Hook code
public IntPtr wParam;  // WPARAM argument
public IntPtr lParam;  // LPARAM argument
}


// Hook Types 
internal enum HookType : int
{
WH_JOURNALRECORD = 0,
WH_JOURNALPLAYBACK = 1,
WH_KEYBOARD = 2,
WH_GETMESSAGE = 3,
WH_CALLWNDPROC = 4,
WH_CBT = 5,
WH_SYSMSGFILTER = 6,
WH_MOUSE = 7,
WH_HARDWARE = 8,
WH_DEBUG = 9,
WH_SHELL = 10,
WH_FOREGROUNDIDLE = 11,
WH_CALLWNDPROCRET = 12,   
WH_KEYBOARD_LL = 13,
WH_MOUSE_LL = 14
}

internal class LocalWindowsHook
{
public delegate int HookProc(int code, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll")]
private static extern IntPtr SetWindowsHookEx(HookType code, HookProc func, IntPtr hInstance, int threadID);

[DllImport("user32.dll")]
private static extern int UnhookWindowsHookEx(IntPtr hhook);

[DllImport("user32.dll")]
private static extern int CallNextHookEx(IntPtr hhook, int code, IntPtr wParam, IntPtr lParam);

// Internal properties
private IntPtr m_hhook = IntPtr.Zero;
private HookProc m_filterFunc = null;
private HookType m_hookType;

// Event delegate
public delegate void HookEventHandler(object sender, HookEventArgs e);

// Event: HookInvoked
public event HookEventHandler HookInvoked;
protected void OnHookInvoked(HookEventArgs e)
{
if (HookInvoked != null)
HookInvoked(this, e);
}

// Class constructor(s)
public LocalWindowsHook(HookType hook)
{
m_hookType = hook;
m_filterFunc = new HookProc(this.CoreHookProc);
}

public LocalWindowsHook(HookType hook, HookProc func)
{
m_hookType = hook;
m_filterFunc = func;
}   

// Default filter function
public int CoreHookProc(int code, IntPtr wParam, IntPtr lParam)
{
if (code < 0)
return CallNextHookEx(m_hhook, code, wParam, lParam);

// Let clients determine what to do
HookEventArgs e = new HookEventArgs();
e.HookCode = code;
e.wParam = wParam;
e.lParam = lParam;
OnHookInvoked(e);

// Yield to the next hook in the chain
return CallNextHookEx(m_hhook, code, wParam, lParam);
}

// Install the hook
public void Install()
{
int threadId = Kernel32.GetCurrentThreadId();
m_hhook = SetWindowsHookEx(m_hookType, m_filterFunc, IntPtr.Zero, threadId);
}

// Uninstall the hook
public void Uninstall()
{
UnhookWindowsHookEx(m_hhook);
}
}
}