哎哟喂 终于看到通通道中人了、、、这几天Hook都快把我弄哭了、、hHook = SetWindowsHookEx(14, MouseHook, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); //hHook = SetWindowsHookEx(14, MouseHook, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);看见网上的都是用的上面那句 我用上面那句 oh yeah 一直没有成功过 用下面那句吧虽然成功了 要是是键盘钩子还好 如果是全局鼠标 程序顶多5秒后 提示崩溃、、、 A callback was made on a garbage collected delegate of type 'ChoseHwnd!ChoseHwnd.Form1+HookProc::Invoke'. This may cause application crashes, corruption and data loss. When passing delegates to unmanaged code, they must be kept alive by the managed application until it is guaranteed that they will never be called. 这个是错误提示、、、哎哟 我都不知道怎么办了、、、
全局钩子不是一直都是在IDE里运行不了,要直接运行.exe文件才能用么
//hHook = SetWindowsHookEx(14, MouseHook, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);看见网上的都是用的上面那句 我用上面那句 oh yeah 一直没有成功过 用下面那句吧虽然成功了 要是是键盘钩子还好 如果是全局鼠标 程序顶多5秒后 提示崩溃、、、
A callback was made on a garbage collected delegate of type 'ChoseHwnd!ChoseHwnd.Form1+HookProc::Invoke'. This may cause application crashes, corruption and data loss. When passing delegates to unmanaged code, they must be kept alive by the managed application until it is guaranteed that they will never be called.
这个是错误提示、、、哎哟 我都不知道怎么办了、、、
这个百度翻译出来的错误提示(哎哟怎么看怎么不像是正常翻译过来的)
GCHandle gc = GCHandle.Alloc(你的回调函数);
用完了再gc.Free();
哈哈 谢谢啦 貌似问题解决了 至少 我运行了 这么久 没有提示程序崩溃 刚才 msdn看了一下这个GCHandle 机制用于在 GCHandleType 枚举创建句柄与所有托管对象相对应。 此句柄可为以下四种类型之一:Weak、WeakTrackResurrection、Normal 或 Pinned。 分配了句柄以后,在非托管客户端保留唯一的引用时,可以使用它防止垃圾回收器回收托管对象。 如果没有这样的句柄,则在该对象代表非托管客户端完成工作以前,有可能被垃圾回收器回收。 还可以使用 GCHandle 创建一个固定对象,该对象返回一个内存地址,并防止垃圾回收器在内存中移动该对象。 当该句柄超出范围时,您必须通过调用 Free 方法显式释放它;否则,可能会发生内存泄漏。 当您释放固定的句柄时,如果没有对关联对象的其他引用,则关联对象将解除固定,并可以被当成垃圾回收
刚才根据 哪位仁兄的提示、、在4.0下 也搞定了 、、、
有人遇到过吗