SetWindowsHookEx возвращает 0 при компиляции для .NET 4.0 Framework в 32-битных машинах

Я пытаюсь установить низкоуровневую клавиатуру Windows для захвата трех нажатых клавиш, даже если приложение не в фокусе. Для этого я вызываю SetWindowsHookEx как

// Create an instance of HookProc.
KeyboardHookProcedure = new HookProc(KeyboardHookProc);
//install hook
hKeyboardHook = SetWindowsHookEx(
    WH_KEYBOARD_LL,
    KeyboardHookProcedure,
    Marshal.GetHINSTANCE(
        Assembly.GetExecutingAssembly().GetModules()[0]),
    0);
//If SetWindowsHookEx fails.
if (hKeyboardHook == 0)
{
    //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set. 
    int errorCode = Marshal.GetLastWin32Error();
    //do cleanup
    Stop(false, true, false);
    //Initializes and throws a new instance of the Win32Exception class with the specified error. 
    throw new Win32Exception(errorCode);
}

. Раньше он работал на 32-битных и 64-битных машинах с использованием .NET Framework 3.5, но после обновления до .NET Framework 4.0 перестал работать на 32-битных машинах.

Кто-нибудь знает, как решить эту проблему, чтобы я мог использовать 4.0 Framework и заставить это работать как на 32-битных, так и на 64-битных машинах?

8
задан eblacklight 25 August 2010 в 15:47
поделиться