Como puedo capturar Ctrl +Alt +K +P claves en un formato en C#? gracias¿Cómo conseguir una combinación de teclas en C#
Respuesta
Ver esta gran entrada de blog sobre la configuración de teclas de acceso rápido en C#
También hay un buen artículo que explica todo esto aquí
MessageFilters
puede ayudarlo en este caso.
public class KeystrokMessageFilter : System.Windows.Forms.IMessageFilter
{
public KeystrokMessageFilter() { }
#region Implementation of IMessageFilter
public bool PreFilterMessage(ref Message m)
{
if ((m.Msg == 256 /*0x0100*/))
{
switch (((int)m.WParam) | ((int)Control.ModifierKeys))
{
case (int)(Keys.Control | Keys.Alt | Keys.K):
MessageBox.Show("You pressed ctrl + alt + k");
break;
//This does not work. It seems you can only check single character along with CTRL and ALT.
//case (int)(Keys.Control | Keys.Alt | Keys.K | Keys.P):
// MessageBox.Show("You pressed ctrl + alt + k + p");
// break;
case (int)(Keys.Control | Keys.C): MessageBox.Show("You pressed ctrl+c");
break;
case (int)(Keys.Control | Keys.V): MessageBox.Show("You pressed ctrl+v");
break;
case (int)Keys.Up: MessageBox.Show("You pressed up");
break;
}
}
return false;
}
#endregion
}
En su C# WindowsForm, registrar el MessageFilter para la captura de teclado de golpes y combinaciones.
public partial class Form1 : Form
{
KeystrokMessageFilter keyStrokeMessageFilter = new KeystrokMessageFilter();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Application.AddMessageFilter(keyStrokeMessageFilter);
}
}
alguna manera que sólo detecta Ctrl +Alt +K. Por favor, lea el comentario en el código de MessageFilter.
No estoy seguro si puedes. Sin embargo, lo que PUEDE hacer es la forma en que Visual Studio lo hace. Tiene accesos directos como Ctrl + K, C. En primer lugar, pulse Ctrl + K , a continuación, mantenga presionada la tecla Ctrl y pulse C. En su caso, se puede comprobar por Ctrl +Alt +K, P.
primer lugar, puede comprobar si hay solamente Ctrl + Alt + K como se hace en las otras respuestas, a continuación, establecer una variable miembro/bandera para indicar Ctrl + Alt + K ha sido presionado. En el mismo método donde verifique K, puede verificar P, y si el indicador que acaba de establecer se configuró en verdadero, haga lo que tenga que hacer. De lo contrario, establezca la bandera en falso.
áspero pseudo-código:
private bool m_bCtrlAltKPressed = false;
public void KeyDown() {
if (Ctrl+Alt+K)
{
m_bCtrlAltKPressed = true;
}
else if (Ctrl+Alt+P && m_bCtrlAltKPressed) {
//do stuff
}
else {
m_bCtrlAltKPressed = false;
}
}
esperanza que es lo suficientemente clara.
Es un acorde, no puede detectarlo sin memorizar haber visto la primera pulsación de tecla del acorde. Esto funciona:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private bool prefixSeen;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (prefixSeen) {
if (keyData == (Keys.Alt | Keys.Control | Keys.P)) {
MessageBox.Show("Got it!");
}
prefixSeen = false;
return true;
}
if (keyData == (Keys.Alt | Keys.Control | Keys.K)) {
prefixSeen = true;
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
¿No capturará esto las teclas repetitivas también? Si se usa un acorde como CTRL + P + P, por ejemplo? – rymdsmurf
La repetición de las teclas produciría Ctrl + P Ctrl + P. Entonces no –
Acabo de compilar y probé el código, y 'lo hace_ (incorrectamente) captura las teclas que se repiten si el acorde usa la misma tecla dos veces. Por ejemplo, mantener presionado CTRL + ALT + P activará el acorde CTRL + ALT + P + P. – rymdsmurf
Puede utilizar GetKeyState para obtener el estado de las otras teclas cuando una de las claves en la combinación se ha presionado. Aquí hay un ejemplo en un formulario.
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace DetectKeyChord
{
public partial class Form1 : Form
{
private const int WM_KEYDOWN = 0x100;
private const int KEY_PRESSED = 0x80;
public Form1()
{
InitializeComponent();
}
public void ShortcutAction()
{
MessageBox.Show("Ctrl+Alt+K+P has been pressed.");
}
private bool IsKeyDown(Keys key)
{
return (NativeMethods.GetKeyState(key) & KEY_PRESSED) == KEY_PRESSED;
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_KEYDOWN)
{
//If any of the keys in the chord have been pressed, check to see if
//the entire chord is down.
if (new[] { Keys.P, Keys.K, Keys.ControlKey, Keys.Menu }.Contains((Keys)m.WParam))
{
if (IsKeyDown(Keys.ControlKey) && IsKeyDown(Keys.Menu) && IsKeyDown(Keys.K) && IsKeyDown(Keys.P))
{
this.ShortcutAction();
}
}
}
base.WndProc(ref m);
}
}
public static class NativeMethods
{
[DllImport("USER32.dll")]
public static extern short GetKeyState(Keys nVirtKey);
}
}
- 1. vb.net combinación de teclas
- 2. GWT manejo combinación de teclas
- 3. Desencadenar teclados (combinación de teclas) con jQuery
- 4. ¿Cómo puedo detectar uno o una combinación de golpes de teclas en C?
- 5. Cómo registrar la combinación de teclas para tres teclas usando C#
- 6. Creación de una combinación de teclas ctrl + tab en PuTTY
- 7. ¿Cómo conectar la combinación de teclas para cambiar de "C" a "Ctrl + C" en .NET?
- 8. cómo enlazar combinación de teclas Ctrl + X + Retorno en jQuery
- 9. Qt evento de combinación de teclas múltiples
- 10. ¿Cómo puedo vincular una expresión regular a una combinación de teclas en emacs?
- 11. accesskey VS combinación de teclas navegador
- 12. Uso de pyhook para responder a la combinación de teclas (no solo teclas)
- 13. Cómo usar varias teclas modificadoras en C#
- 14. En Vim, ¿Cómo saber lo que es una combinación de teclas hace
- 15. Cambiar la combinación de teclas para la selección de autocompletar
- 16. Enviar combinación de teclas a la ventana de fondo
- 17. Combinación de fusiones en una sola combinación
- 18. Python para olfatear combinación de teclas estilo Autohotkey, ¿automatización?
- 19. ¿Cómo tener una combinación de teclas principal que puede tener valores nulos?
- 20. cadenas en C, cómo conseguir subCadena
- 21. ¿Existe una combinación de teclas en Xcode para implementar un protocolo?
- 22. código a formatear con R # en una sola combinación de teclas
- 23. ¿Cuál es la forma más fácil de hacer una combinación de teclas para Windows?
- 24. ¿Cómo puedo cambiar la combinación de teclas utilizada para autocompletar en vim?
- 25. ¿Cómo se configura la combinación de teclas Meta-Función en Vim?
- 26. Conseguir el manipulador de ventana en C#
- 27. resultados de la combinación de uniq -c
- 28. Nombres de teclas bonitas en C# (Formularios)
- 29. combinación de teclas alternativa para saltar al final de una línea
- 30. C# y teclas de flecha
¿En línea o cuando el formulario tiene el foco? – Codesleuth
El formulario tiene foco – Ristovak