Pregunta

RESPUESTA: No hay un equivalente de forma nativa gestionado por este método. Sin embargo, una API de código de ejemplo bien gestionada puede ser encontrado más en pinvoke.net .

Hola a todos

Tengo una aplicación que acepta una bandera para 'modo de seguimiento'. Rastrear el modo de giros en un formulario que contiene un cuadro de texto. La salida de la caja de texto se muestra a través de un objeto TraceListener personalizado. Si hay un presente -t ??en la línea de comandos, se abrirá la ventana de traza desde el interior de su propio hilo de baja prioridad. Es muy útil para los consultores que están tratando de diagnosticar la aplicación cuando algo va mal.

A los pocos consultores han solicitado que al pulsar alguna combinación de teclas oscura durante el arranque debe activar el modo de traza de modo que no tienen que ir a la línea de comandos para activar cada vez. Es una petición razonable.

No quiero darles un botón o elemento de menú para esto porque mucha de la información crítica que los consultores harán caso se muestran a punto de traza en el arranque antes de crear la forma principal de los diversos componentes se crean instancias y inicializado.

pensé que debería haber sido lo suficientemente simple para detectar el estado del teclado actual en .NET - pero parece que dondequiera que miro, el consejo es utilizar [DllImport ( "user32.dll", EntryPoint = "GetKeyboardState", SetLastError = true)] como método para detectar lo que está pasando.

Eso es todo muy bien - Me siento cómodo con eso. Sin embargo, como regla general trato de asegurarse de que yo utilizo código administrado .NET nativo para las funciones de Windows Antes de seguir tratando de rodar mi propia.

¿Hay un método .NET nativo o equivalente al de user32.dll GetKeyboardState?

¿Fue útil?

Solución

Control.ModiferKeys es una propiedad estática de Control cual, si ninguna tecla, modificadores se presionan actualmente. No estoy al tanto de cualquier cosa para conseguir el estado general con el teclado, parece que la mayoría del código P / Invoke, ya sea con o GetKeyboardState GetKeyState para el control de claves específicas.

Otros consejos

¿Está seguro de que PreviewKeyDownEventArgs no tiene lo que necesita? Si lo hace, entonces usted puede utilizar el evento PreviewKeyDown.

Otra opción podría ser teclas de aceleración. Una función de la API de Windows puede utilizar una tabla de aceleradores de recursos de la aplicación para mapear secuencias de teclado para los comandos, donde un comando es la misma cosa que un elemento de menú hace; usted sabe, un mensaje WM_COMMAND. Sé que es fácil de hacer en MFC utilizando C ++, pero cuando traté de encontrar la C # forma de hacerlo, me perdí. Si usted puede encontrar la manera de hacer las teclas de aceleración usando C #, entonces podría ser una solución flexible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top