RT,
我注册监听键盘和鼠标的勾子没有问题,但是监听全局的WH_CBT就返回0。
以下是我的代码,键盘监听的OK,但是WH_CBT的不行,谁能帮我解决一下:
if (type == HookType.WH_KEYBOARD_LL)
{
if (kbhHook == 0)//监视输入到线程消息队列中的键盘消息
{
kbHook = new HookProc(KeyBoardHookProc);
kbhHook = SetWindowsHookEx(
type,
kbHook,
GetModuleHandle(
Process.GetCurrentProcess().MainModule.ModuleName),
0
);
if (kbhHook == 0)
UninstallKeyBoardHook();
}
}
else if (type == HookType.WH_CBT)
{
if (ethHook == 0)//监视窗口变化消息
{
etHook = new HookProc(EventHookProc);
ethHook = SetWindowsHookEx(
type,
etHook,
GetModuleHandle(
Process.GetCurrentProcess().MainModule.ModuleName
),
0
);
if (ethHook == 0)
{
UninstallEventHook();
}
}
}
------解决思路----------------------
直接原因是全局钩子(除了WH_KEYBOARD_LL和WH_MOUSE_LL)外,需要加载一个本地dll到目标进程。
而纯C#是不能做本地dll的。
另外,钩子是很不好的编程技术,应该尽量避免。