keypress c# solo numeros
Capturar una pulsaciĆ³n del teclado en el fondo (2)
Tengo una aplicación que se ejecuta en segundo plano. Tengo que generar algún evento cada vez que un usuario presione F12 en cualquier momento. Entonces, ¿qué necesito para capturar una pulsación de tecla. En mi aplicación, si alguna vez un usuario presiona F10 , se realizará algún evento. No entiendo cómo hacer eso?
¿Alguien tiene alguna idea de cómo hacer eso?
N: B: Es una aplicación winforms. No necesita tener mi forma de enfocar. Mi ventana principal puede permanecer en la bandeja del sistema, pero todavía tiene que capturar la pulsación de tecla.
En caso de que tenga algún problema ejecutando la solución de Otiel:
Necesitas incluir:
using System.Runtime.InteropServices; //required for dll import
Otra duda para los novatos como yo: "el mejor de la clase" realmente significa el mejor de su clase como este (no espacio de nombres o constructor):
public partial class Form1 : Form { [DllImport("user32.dll")] public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc); [DllImport("user32.dll")] public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
No es necesario agregar user32.dll como referencia al proyecto. WinForms siempre carga este dll automáticamente.
Lo que quieres es una tecla de acceso directo global .
Importe las bibliotecas necesarias en la parte superior de su clase:
// DLL libraries used to manage hotkeys [DllImport("user32.dll")] public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc); [DllImport("user32.dll")] public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
Agregue un campo en su clase que será una referencia para la tecla de acceso rápido en su código:
const int MYACTION_HOTKEY_ID = 1;
Registre la tecla de acceso rápido (en el constructor de su Formulario de Windows, por ejemplo):
// Modifier keys codes: Alt = 1, Ctrl = 2, Shift = 4, Win = 8 // Compute the addition of each combination of the keys you want to be pressed // ALT+CTRL = 1 + 2 = 3 , CTRL+SHIFT = 2 + 4 = 6... RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 6, (int) Keys.F12);
Maneje las teclas escritas agregando el siguiente método en su clase:
protected override void WndProc(ref Message m) { if (m.Msg == 0x0312 && m.WParam.ToInt32() == MYACTION_HOTKEY_ID) { // My hotkey has been typed // Do what you want here // ... } base.WndProc(ref m); }