Foros del Web » Programación para mayores de 30 ;) » .NET »

Ejecutar Proceso C#/Mono

Estas en el tema de Ejecutar Proceso C#/Mono en el foro de .NET en Foros del Web. Hola. Realizo lo siguiente en mono: Process p = new Process(); p.StartInfo.UseShellExecute = false; p.StartInfo.FileName = "gnome-sudoku" p.Start(); p.WaitForInputIdle(); y posteriormente y a continuación en ...
  #1 (permalink)  
Antiguo 10/02/2010, 08:35
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Ejecutar Proceso C#/Mono

Hola.

Realizo lo siguiente en mono:

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = "gnome-sudoku"
p.Start();
p.WaitForInputIdle();

y posteriormente y a continuación en el código, realizo lo siguiente:

Process sk = new Process();
sk.StartInfo.FileName = "xsendkeys";
sk.StartInfo.Arguments = 95; //corresponde a la tecla F11
sk.Start();


Lo que quiero hacer, es mandar la tecla F11 a la ventana activa, y
funciona, sólo que la tecla se manda sin parar. Quiero decir que es como
si dejara la tecla F11 pulsada sobre la ventana de gnome-sudoku, por lo
que la ventana no para de bailar. Lo he probado también con xdotool y
sucede igual. System.Windows.Forms.SendKeys.Send no funciona, al parecer
, sobre ventanas gtk.

Si lo hago directamente sobre una ventana de shell, funciona bien. Es
como si el process.start() no terminara de funcionar bien, y yo no
supiera hacerlo como se debe.

Alguna idea? Gracias por adelantado.

Juan Carlos F.
  #2 (permalink)  
Antiguo 10/02/2010, 09:01
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ejecutar Proceso C#/Mono

sk.StartInfo.Arguments = 95; //corresponde a la tecla F11

tienes alguna documentación sobre esa aplicacion, he buscado y sólo funciona en entornos X, es decir en GNU/linux o Unix

lo máximo que conseguí fue el código fuente http://people.csail.mit.edu/adonovan/hacks/xsendkey.c y dándole una ojeada rápida puede que tenga el parámetro count que especifique las veces a ejecutar la secuencia de teclas, pero no te aseguro nada.

otra opcion sería matar el proceso con un hilo timer (de unos cuantos ms) después de ejecutarlo
  #3 (permalink)  
Antiguo 10/02/2010, 09:15
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Ejecutar Proceso C#/Mono

Hola.

Si, efectivamente te hablo de mono/C# bajo linux con monodevelop.

la aplicacion xsendkeycode no admite numero de repeticiones, es más, el proceso está acaba, pero la tecla sigue mandándose. Si hago un ps -e no aparece en el listado de procesos, y ya he probado a hacer kill y killall, pero nada. La tecla F11 sigue repitiendose como si se estuviera ejecutando sin parar.

Estoy perdido. He probado con xdotool, que es otra herramienta que hace lo mismo, y me sucede igual. Creo que debe de ser alguna propiedad de la clase Process.

Gracias por tu respuesta.
  #4 (permalink)  
Antiguo 10/02/2010, 09:33
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ejecutar Proceso C#/Mono

el proceso puede ocultarse de la lista, pero debe seguir activo porque o si no ¿que proceso manda la tecla indefinidamente?

deberías probar con:

Process sk = new Process();
sk.StartInfo.FileName = "xsendkeys";
sk.StartInfo.Arguments = 95; //corresponde a la tecla F11
sk.Start();
sk.Kill();
sk.Dispose(); //no lo creo necesario
  #5 (permalink)  
Antiguo 10/02/2010, 09:52
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Ejecutar Proceso C#/Mono

Lo probaré y te digo.

De todas formas, yo sigo pensando que es algo relacionado con el Process, ya que si lo ejecuto desde una consola, funciona correcto.

Gracias por tus respuestas. Te digo algo en probarlo.
  #6 (permalink)  
Antiguo 10/02/2010, 16:05
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Ejecutar Proceso C#/Mono

Buenas.

Si hago el kill, no realiza la pulsación de tecla, ni siquiera una vez. El kill se hace posteriormente al start, y al parecer, no da tiempo a ejecutarse.

He probado a poner un sk.wait*****it, y luego a hacer el kill, pero como ya ha terminado, el kill da error. Lo que he podido comprobar es que hace el wait*****it, por lo tanto, la ejecución termina. Como te decía antes, no está el proceso en ejecución, pero la pulsación de la tecla sigue estando.

Estoy perdido. ¿Alguna idea más?

Etiquetas: ejecutar, proceso
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:19.