tecla funcion derecho contextual como activa c# keyboard contextmenu

funcion - C#- Detecta si la tecla MAYÚS se mantiene al abrir un menú contextual



tecla menu funcion (5)

En Silverlight, al menos en las últimas versiones, debe usar:

if(Keyboard.Modifiers == ModifierKeys.Shift) { ... }

En mi aplicación C #, quiero mostrar un menú contextual, pero quiero agregar opciones especiales al menú si la tecla MAYÚS se mantiene presionada cuando se abre el menú contextual.

Actualmente estoy usando la API GetKeyState para verificar la tecla MAYÚS. Funciona bien en mi computadora, pero los usuarios con Windows que no es inglés dicen que no funciona para ellos.

También leí que en la API de Win32 cuando se abre un menú contextual hay una bandera que indica que en el menú debería mostrar EXTENDEDVERBS . En C #, EventArgs para el evento Opening no contiene (por lo que puedo decir) una propiedad que indique EXTENDEDVERBS o si se presionan las teclas modificadoras.

Aquí está el código que estoy usando ahora dentro del evento " Opening ":

// SHIFT KEY is being held down if (Convert.ToBoolean(GetKeyState(0x10) & 0x1000)) { _menuStrip.Items.Add(new ToolStripSeparator()); ToolStripMenuItem log = new ToolStripMenuItem("Enable Debug Logging"); log.Click += new EventHandler(log_Click); log.Checked = Settings.Setting.EnableDebugLogging; _menuStrip.Items.Add(log); }

Si GetKeyState es la forma correcta de hacerlo, ¿está mi código detectando correctamente la tecla MAYÚS presionada?


En realidad es mucho más simple que cualquiera de eso

if( Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl) || Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt) || Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)) { /** do something */ }

Solo asegúrate de que tu proyecto haga referencia a PresentationCore y WindowsBase


Puede usar la propiedad estática de ModifierKeys en el control para determinar si se mantiene presionada la tecla Mayús.

if (Control.ModifierKeys == Keys.Shift ) { ... }

Esta es una enumeración de estilo de bandera, por lo que, dependiendo de su situación, es posible que desee realizar pruebas más rigurosas.

También tenga en cuenta que esto verificará si la tecla Shift se mantiene en el momento que verifica el valor. No es el momento cuando se inició el menú abierto. Esa puede no ser una diferencia significativa para su aplicación, pero vale la pena señalarlo.


Use esto para detectar si se presiona la tecla Shift:

if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)


Keyboard.Modifiers también funciona con proyectos reales de WPF.
También recomendaría su uso sobre Keyboard.GetKeyStates porque el último usa la activación y puede no reflejar el estado de la clave real.

También tenga en cuenta que esto se activará SÓLO si la tecla modificadora de desplazamiento está desactivada y nada más:

if(Keyboard.Modifiers == ModifierKeys.Shift) { ... }

Si solo quiere detectar si la tecla Mayús está abajo, si se presiona otra tecla modificadora o no, use esta:

if((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift) { ... }