Estoy haciendo una aplicación de Windows que captura la entrada del teclado de forma global. Cuando un usuario utiliza el acceso directo combinado CTRL + ALT + G la aplicación utiliza¿Por qué SendKey.Send() solo funciona de vez en cuando?
SendKey.Send(Guid.NewGuid().ToString());
para escribir un generaged GUID en cualquier texto campo está en foco. Y debería hacer esto independientemente de la aplicación que tome la entrada.
Funciona exactamente como lo pretendía la primera vez que escribes CTRL + ALT + G, pero los intentos subsiguientes no dan como resultado nada, o solo son éxitos muy poco frecuentes.
Quiero decir, todo debe ser muy simple y consistente. Tengo un gancho de teclado global que funciona todo el tiempo, lo he probado, pero el método SendKey.Send() no funciona todas las veces.
He buscado en Google todo lo relacionado con mi problema pero nada ha funcionado hasta ahora.
¿Alguien tiene alguna idea?
EDITAR 1: He intentado usar SendKey.SendWait() también, hace lo mismo. Realmente quiero una forma más receptiva de generar un nuevo GUID usando este enfoque de atajo de teclado.
EDIT 2:
A continuación se muestra las partes esenciales del código:
/* Initialization Code Here */
// register the event that is fired after the key press.
hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hook_KeyPressed);
// register the control + alt + F12 combination as hot key.
hook.RegisterHotKey((uint)(HotkeyModifiers.Control | HotkeyModifiers.Alt), Keys.G);
El código del evento es bastante simple:
void hook_KeyPressed(object sender, KeyPressedEventArgs e)
{
SendKeys.SendWait(Guid.NewGuid().ToString());
}
Todo lo demás en mi proyecto es sólo pelusa.
Actualización 1:
tengo más preguntas sobre este tema, pero estoy fuera de tiempo para seguir trabajando en esto para hoy. He implementado la sugerencia de Jon Raynor de utilizar el enfoque app.config con cierto grado de éxito. Una vez que aísle mis nuevos problemas, publicaré una edición y posiblemente cerraré esta pregunta si logro que mi aplicación funcione según lo previsto.
¿Qué quiere decir con captura de entrada de teclado globalmente? Si lo haces, eso no significa que también recibas el GUID. Seguramente quieres RegisterHotKey. –
Estoy utilizando el pinvoke de RegisterHotKey para este proyecto. Capturar las teclas rápidas es fácil, el problema es con el método SendKey.Send(). – LamdaComplex
Cuando está en su código, ¿llama a SendKey.Send? –