¿Cómo puedo desactivar o bloquear el botón de Windows?¿cómo puedo desactivar la clave de Windows en C#?
Respuesta
/// <summary>
/// Security routines related to the Windows Key on a standard personal computer Keyboard
/// </summary>
public static class WindowsKey {
/// <summary>
/// Disables the Windows Key
/// </summary>
/// <remarks>May require the current user to logoff or restart the system</remarks>
public static void Disable() {
RegistryKey key = null;
try {
key = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Keyboard Layout", true);
byte[] binary = new byte[] {
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x03,
0x00,
0x00,
0x00,
0x00,
0x00,
0x5B,
0xE0,
0x00,
0x00,
0x5C,
0xE0,
0x00,
0x00,
0x00,
0x00
};
key.SetValue("Scancode Map", binary, RegistryValueKind.Binary);
}
catch (System.Exception ex) {
Debug.Assert(false, ex.ToString());
}
finally {
key.Close();
}
}
/// <summary>
/// Enables the Windows Key
/// </summary>
/// <remarks>May require the current user to logoff or restart the system</remarks>
public static void Enable() {
RegistryKey key = null;
try {
key = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Keyboard Layout", true);
key.DeleteValue("Scancode Map", true);
}
catch (System.Exception ex) {
Debug.Assert(false, ex.ToString());
}
finally {
key.Close();
}
}
}
muy buena respuesta –
Necesita un gancho de teclado. Inicia un sitio como este:
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInstance, 0);
y continuar de esta manera:
LRESULT KeyboardProc(...)
{
if (Key == VK_SOMEKEY)
return 1; // Trap key
return CallNextHookEx(...); // Let the OS handle it
}
Y para más detalles: http://www.codeproject.com/KB/winsdk/AntonioWinLock.aspx
Suponiendo que desea desactivar la tecla Windows permenantly y no sólo cuando su código está en foco, entonces puede hacerlo editando el registro de la siguiente manera:
Para deshabilitar : Añadir un nuevo valor REG_BINARY denominado "Scancode Mapa" a "HKEY_LOCAL_ MACHINE \ System \ CurrentControlSet \ Control \ Keyboard Layout" con un valor de datos de "00000000000000000300000000005BE000005CE000000000"
Para habilitar : Elimine completamente el valor "Scancode Map" del registro.
+1, gracias por eso. Sin embargo, no estaría feliz con el tipo que destrozó mi teclado. – Tobiasopdenbrouw
Usar los ganchos de Windows es mucho más limpio que modificar el registro. Además, a veces las personas han configurado sus propios mapas de escaneo personalizados, y sobrescribirlos no es algo muy amable de hacer.
Para utilizar las ventanas de las funciones clave de gancho que necesita para dllimport funciona un par WinAPI:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr GetModuleHandle(string lpModuleName);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr SetWindowsHookEx(int idHook, HookHandlerDelegate lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern short GetKeyState(int keyCode);
Una explicación bastante completa y paso a paso se pueden encontrar en CodeProject. Aquí hay un direct link a un archivo de clase autónomo de ese ejemplo que hace de todo (para que compile limpio si está usando WPF necesitará que haga referencia manualmente a System.Windows.Forms dll o simplemente cambie el 'System.Windows.Forms La referencia de. Keys a System.Windows.Input.Key debería funcionar).
Recuerde llamar a UnhookWindowsHookEx() (la clase hace esto en Dispose()) para desenganchar sus capturas o la gente lo odiará.
- 1. C# - Desactivar palabras clave dinámicas
- 2. ¿Cómo puedo desactivar ASSERT (x) en C++?
- 3. ¿Cómo puedo desactivar el modo vertical en Windows 8?
- 4. ¿Cómo puedo simular la clave de Windows en Autohotkey?
- 5. ¿Cómo puedo desactivar la optimización del compilador en C#?
- 6. Desactivar todo en Windows excepto el programa C#
- 7. ¿cómo puedo desactivar la salida a log4j.rootLogger?
- 8. ¿Cómo puedo desactivar _moz_resizing?
- 9. ¿Cómo puedo almacenar de forma segura una clave AES en Windows con .Net (C#)?
- 10. ¿Cómo puedo desactivar la detección táctil?
- 11. ¿Cómo puedo desactivar la orientación horizontal?
- 12. rizo lib en C++ desactivar la impresión
- 13. Desactivar el teclado <enter> clave
- 14. ¿Puedo desactivar la fusión automática en Subversion?
- 15. ¿Cómo desactivar Windows Remote-Desktop con Powershell?
- 16. ¿Cómo puedo desactivar Java basurero?
- 17. ¿Cómo puedo desactivar un UISegmentedControl?
- 18. ¿Puedo usar la palabra clave `abstracta` en la clase C++
- 19. ¿Cómo puedo desactivar trabajos en Quartz JDBCJobStore?
- 20. ¿Cómo puedo desactivar un botón en Xcode?
- 21. ¿Puedo crear mi propio certificado digital en C# o Windows?
- 22. ¿Cómo puedo desactivar el manejo de excepciones en MSVC?
- 23. C# Remoting - Cómo desactivar CustomErrors
- 24. ¿Cómo puedo desactivar la indexación en Xcode 4?
- 25. ¿Cómo puedo desactivar estilos de CSS heredados?
- 26. Sqlite3: ¿Desactivar el índice de clave principal durante la inserción?
- 27. ¿Puedo desactivar HttpSession en web.xml?
- 28. ¿Cómo puedo romper la integridad referencial brevemente, dentro de una transacción, sin desactivar la restricción de clave externa?
- 29. ¿Cómo puedo enviar la clave F4 a un proceso en C#?
- 30. ¿Cómo puedo desactivar la clasificación del usuario final de XtraTreeList?
de manera permanente o simplemente mientras su programa se está ejecutando? – ChrisBD
¿Solo el botón de Windows, o cosas como Ctrl + Esc también? –