Estoy tratando de establecer un gancho de teclado de Windows de bajo nivel para capturar tres teclas presionadas incluso si la aplicación no está enfocada. Para ello voy a llamar SetWindowsHookEx comoSetWindowsHookEx devuelve 0 al compilar para .NET Framework 4.0 en máquinas de 32 bits
// 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);
}
Esto solía trabajar en las máquinas de 32 y 64 bits utilizando el .NET Framework 3.5, pero después de actualizar a .NET Framework 4.0 dejado de trabajar en máquinas de 32 bits.
¿Alguien sabe cómo resolver esto para que yo pueda usar el Framework 4.0 y hacer que esto funcione tanto en máquinas de 32 bits como de 64 bits?
En .NET 4.0, SetWindowsHookEx devuelve 0 para mí con un error de procedimiento de enlace no es válido. – tofutim