C # Низкоуровневая клавиатура Крюк не работает

Это код для моего занятия по брелку, но он нет работа. Мне было интересно, если кто-то может сказать мне, почему? Я'Я создаю его в другом консольном приложении. Сообщение отладки дает правильный вывод, но хук клавиатуры просто нет поймать ключи. Я надеялся, что кто-нибудь скажет мне, почему.

namespace GlobalHooks
{
    public class InterceptKeys
    {        
        private const int WH_KEYBOARD_LL = 13;
        private const int WM_KEYDOWN = 0x0100;

        private static IntPtr _hookID = IntPtr.Zero;
        private static String keysHooked = String.Empty;

        private static LowLevelHookProc keyboardHook;

        public delegate IntPtr LowLevelHookProc(int nCode, Int32 wParam, IntPtr lParam);
        public delegate void KeyboardHandleFunction(int vkCode);
        public static event KeyboardHandleFunction keyHookReturn;

        public InterceptKeys(KeyboardHandleFunction func)
        {
            keyHookReturn = func;
            keyboardHook = new LowLevelHookProc(HookCallback);
        }

        public static void debug()
        {
            Console.Write("\n[Success!] _hookID: "+_hookID);
            Console.Write("\n[Success!] keyboardProc: "+keyboardHook.ToString());
        }

        private IntPtr SetupHook(LowLevelHookProc keyProcess)
        {
            using (Process curProcess = Process.GetCurrentProcess())
            using (ProcessModule curModule = curProcess.MainModule)
            {
                return SetWindowsHookEx(WH_KEYBOARD_LL, keyProcess,
                    GetModuleHandle(curModule.ModuleName), 0);
            }
        }

        public void Hook()
        {
            _hookID = SetupHook(keyboardHook);
            debug();
        }

        public void Unhook()
        {
            UnhookWindowsHookEx(_hookID);
        }


        public static void OnCallbackReturn(int nCode)
        {
            if (keyHookReturn != null)
            {
                keyHookReturn(nCode);
            }
            else
            {
                throw new Exception();
            }
        }

        public static IntPtr HookCallback(int nCode, Int32 wParam, IntPtr lParam)
        {
            Console.WriteLine("Calledback"Wink;
            if (nCode >= 0 && wParam == WM_KEYDOWN)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                Console.WriteLine((Keys)vkCode);
                OnCallbackReturn(nCode);
            }
            return CallNextHookEx((int)_hookID, nCode, wParam, lParam);
        }

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelHookProc lpfn, IntPtr hMod, uint dwThreadId);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool UnhookWindowsHookEx(IntPtr hhk);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr CallNextHookEx(int hhk, int nCode, int wParam, IntPtr lParam);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetModuleHandle(string lpModuleName);
    }
} 

Ответы на вопрос(1)

Ваш ответ на вопрос