2010-06-25 11 views
6

Estoy escribiendo una aplicación Window .NET en C#, que ejecuta una aplicación de consola de terceros a través de la clase Process, lo más oculta posible (CreateNoWindow , RedirectStandardOutput, etc.).Cómo enviar una tecla de función de función (F1..F12) a una aplicación de consola en .NET

He redirigido su entrada estándar, por lo que puedo escribir cualquier cadena que desee, pero no teclas de función u otro tipo de teclas especiales, ya que no tienen una representación de caracteres. En cuanto a mí, tengo que enviar las teclas F1 a F4 a la aplicación de la consola. Las soluciones que he encontrado son para aplicaciones con ventana (PostMessage, SendMessage).

¿Cómo puedo hacer esto para mi aplicación de consola?

¿Hay algo que ver con el mango del proceso?

Respuesta

0

Sendkeys.SendWait puede resolver su problema.

+0

SendKeys solo puede enviar pulsaciones de teclas a la aplicación activa, que desafortunadamente no es el caso aquí. – ifroz

0

¿Funciona SendKeys ("{F1}")? (la consola tendrá que estar activa, sin embargo).

+1

La consola en sí no existe como una ventana (Process.CreateNoWindow), por lo que SendKeys no es aplicable en este caso. – ifroz

1

No puede. Las teclas de función no pueden funcionar con stdin, una aplicación tiene que llamar a ReadConsoleInput() para poder detectarlas. Eso ya no funciona cuando comienzas el proceso sin una ventana de consola.

+0

No hay forma de enviar algunos datos al búfer que lee, ¿verdad? – ifroz

+0

Sin ventana de consola == sin memoria intermedia. –

+0

No estoy comprando esta respuesta. Mi aplicación finaliza cuando presiono CTRL-BREAK, pero no tiene ninguna llamada a ReadConsoleInput, por lo que posiblemente no tenga nada que ver con eso. Como la consola de comandos tiene la capacidad de iniciar un proceso y enviarle una señal de interrupción, no veo ninguna razón por la cual alguna otra aplicación que inicie un proceso no pueda enviar el mismo tipo de señal. – Triynko

0

Esto no es directamente una respuesta a su pregunta, pero ¿ha considerado usar MSMQ?

Si su aplicación de ventana puede recibir esas pulsaciones de tecla, podría pasar ese hecho a su aplicación de consola utilizando MSMQ. Puede que no tenga que pasar la pulsación de teclas, solo el hecho de que fueron presionadas.

He encontrado este techrepublic article útil para obtener los principios básicos de MSMQ en funcionamiento.

Cuestiones relacionadas