110,552
社区成员
发帖
与我相关
我的任务
分享
#region 钩子类型的枚举
public 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
}
#endregion
/// <summary>
/// 安装钩子
/// </summary>
/// <param name="_hookHandle">当前钩子</param>
/// <param name="hWnd">句柄</param>
/// <returns></returns>
private IntPtr InstallHook(IntPtr _hookHandle, IntPtr hWnd)
{
if (_hookHandle != IntPtr.Zero)
return _hookHandle;
Module[] list = System.Reflection.Assembly.GetExecutingAssembly().GetModules();
System.Diagnostics.Debug.Assert(list != null && list.Length > 0);
int processid = User32API.GetWindowThreadProcessId(hWnd, 0);
hookProc = new HookProc(myhookproc);
_hookHandle = (IntPtr)User32API.SetWindowsHookEx(HookType.WH_CBT, hookProc, (IntPtr)Marshal.GetHINSTANCE(list[0]), (int)processid);
return _hookHandle;
}
//钩子处理函数,在这里拦截消息并做处理
private int myhookproc(int code, IntPtr wparam, ref CWPSTRUCT cwp)
{
switch (code)
{
case 0:
switch (cwp.message)
{
case 0x0000F://WM_PAINT,拦截WM_PAINT消息
//do something
break;
case 0:
break;
}
break;
}
if (code == 6)
{
if(cwp.message==9)
this.textBox1.Text += "编码:" + code.ToString() + "\t\n消息:" + Convert.ToString(cwp.message, 16) + "\t\n\r";
}
return User32API.CallNextHookEx(IntPtr.Zero, code, wparam, ref cwp);
}
//钩子处理函数,在这里拦截消息并做处理
private int myhookproc(int code, IntPtr wparam, ref CWPSTRUCT cwp)
{
switch (code)
{
case 1:
switch (cwp.message)
{
case 0x0000F://WM_PAINT,拦截WM_PAINT消息
//do something
break;
case 0x112:
break;
}
this.textBox1.Text += "编码:" + code.ToString() + "\t\n参数:" + wparam + "消息:" + cwp.message + "\t\n\r";
break;
}
return User32API.CallNextHookEx(IntPtr.Zero, code, wparam, ref cwp);
}
按你所说的,我在code=1的操作没有任何反应啊。 if (cwp.message == 0x112)
this.textBox1.Text += "编码:" + code.ToString() + "\t\n参数:" + wparam + "消息:" + Convert.ToString(cwp.message, 16) + "\t\n\r";
为什么这样用,还是得不到了?