.net 全局钩子
第一个问题:看了一些资料,不是说全局钩子的钩子函数必须写在dll中才行吗,可是为什么没这么做也可以,我测试了,肯定的。KeyboardHookProc跟其他所有代码全在一个exe中,为什么能调用掉钩子函数KeyboardHookProc。
public static int KeyboardHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= 0)
{
}
}
public void HookStart()
{
if (hKeyboardHook == 0)
{
// 创建HookProc实例
KeyboardHookProcedure = new HookProc(KeyboardHookProc);
hKeyboardHook = SetWindowsHookEx(14, KeyboardHookProcedure, GetModuleHandle(System.Diagnostics.Process.GetCurrentProcess().MainModule.ModuleName), 0);
if (hKeyboardHook == 0)
{
HookStop();
throw new Exception("SetWindowsHookEx failed.");
}
}
}
第二个问题安装钩子的时候,为什么不再主线程中安装钩子就没有效果。。。。。
private void Form1_Load(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(() =>
{
Hook hook = new Hook();
hook.HookStart();
}));
th.Start();
}
而下面这样是有效果的。。
.net C# 钩子 api --------------------编程问答-------------------- 问题一:因为你的钩子类型是WH_MOUSE_LL,这个是对底层的鼠标输入事件进行监视的,总共有如下四个类型的钩子不写在DLL中:WH_JOURNALPLAYBACK,WH_JOURNALRECORD,WH_KEYBOARD_LL,WH_MOUSE_LL,这些钩子是在哪个线程当中安装的,其钩子函数就在哪个线程中执行,而其他类型是通过把DLL注入目标进程的方式才使得回调函数可以执行
private void Form1_Load(object sender, EventArgs e)
{
Hook hook = new Hook();
hook.HookStart();
}
问题二:不懂 --------------------编程问答-------------------- 除
补充:.NET技术 , C#