コード例 #1
0
 protected override bool ReleaseHandle()
 {
     //NOTE Calling Unhook during processexit causes deley
     if (_closing)
     {
         return(true);
     }
     return(HookNativeMethods.UnhookWindowsHookEx(handle) != 0);
 }
コード例 #2
0
        private static HookResult HookGlobal(int hookId, Callback callback)
        {
            _globalHookProc = (code, param, lParam) => HookProcedure(code, param, lParam, callback);

            var hookHandle = HookNativeMethods.SetWindowsHookEx(
                hookId,
                _globalHookProc,
                Process.GetCurrentProcess().MainModule.BaseAddress,
                0);

            if (hookHandle.IsInvalid)
            {
                ThrowLastUnmanagedErrorAsException();
            }

            return(new HookResult(hookHandle, _globalHookProc));
        }
コード例 #3
0
        private static HookResult HookApp(int hookId, Callback callback)
        {
            _appHookProc = (code, param, lParam) => HookProcedure(code, param, lParam, callback);

            var hookHandle = HookNativeMethods.SetWindowsHookEx(
                hookId,
                _appHookProc,
                IntPtr.Zero,
                ThreadNativeMethods.GetCurrentThreadId());

            if (hookHandle.IsInvalid)
            {
                ThrowLastUnmanagedErrorAsException();
            }

            return(new HookResult(hookHandle, _appHookProc));
        }
コード例 #4
0
 private static IntPtr CallNextHookEx(int nCode, IntPtr wParam, IntPtr lParam)
 {
     return(HookNativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam));
 }