• Publicidad

Abrir aplicación Win32

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Abrir aplicación Win32

Notapor jclp77 » 2007-01-18 14:47 @658

Hola a todos!!

Requiero de conocimiento :D, resulta que tengo un script que cuando quiero abrir una aplicación que me solicita un usuario y un pwd y no me permite seguir con el script hasta que cierro la apliación, ya utilice system (aplicación) y exec (aplicacion) pero en los dos casos no me regresa al script una vez ejecutado el comando. Alguna idea??

Saludos
jclp77
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2006-09-06 12:04 @544
Ubicación: México

Publicidad

Notapor creating021 » 2007-01-18 14:52 @661

Se puede hacer con open, qx o ``;

¡Ah! Sí, y con IPC::Open2, IPC::Open3 :)
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor jclp77 » 2007-01-18 15:31 @688

Hola!!

Ya utilice también open, qx y ``, pero como es una aplicación visual basic se queda esperando el usuario y password y no regresa al script.

Saludos
jclp77
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2006-09-06 12:04 @544
Ubicación: México

Notapor creating021 » 2007-01-18 16:37 @734

No te entiendo.
¿Qué quieres hacer, leer la salida?
¿Puedes mostrar un poco de código o explicar mejor?
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor jclp77 » 2007-01-18 17:29 @770

No quiero leer la salida, simplemente abrir el programa ya que le pasaré los parámetros utilizando el módulo win32::guitest (sendkeys, pushbuttons, etc), pero una vez que abro el programa no ejecuta las demás instrucciones hasta que cierro el programa.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Win32::GuiTest qw(FindWindowLike GetWindowText
    SetForegroundWindow SendKeys);

system "C:\\Consulta.exe"; #AQUÍ ES DONDE SE QUEDA
  $Win32::GuiTest::debug = 0;
  my @windows = FindWindowLike(0, "^Consulta");
  for (@windows) {
      SetForegroundWindow($_);
      SendKeys("123{TAB}123{TAB}{ENTER}"); #ENVIA USUARIO Y PASSWORD.
          sleep(5);
          SendKeys("%c");
      SendKeys("p");
          sleep(1);
      SendKeys("34897000156470{TAB}{ENTER}");
          sleep(3);
          SendKeys("%p");
          SendKeys("%o");
          SendKeys("p");
      SendKeys("s");
          sleep(3);
          SendKeys("{ENTER}");
          sleep(2);
          SendKeys("{ENTER}");
          sleep(2);
          SendKeys("{ENTER}");
          SendKeys("%n");
          SendKeys("{ENTER}");
          sleep(2);
      SendKeys("34897000156470{TAB}{ENTER}");
  }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
jclp77
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2006-09-06 12:04 @544
Ubicación: México

Notapor creating021 » 2007-01-18 17:53 @787

Ya entendí, pudes usar fork o (no se si en Windows sirva) haces el system con &:
system("C:\\programa.exe &");
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2007-01-18 18:30 @813

Sí, ese es el problema. Al ejecutar system(), estás pidiendo que ejecute un programa y que ESPERE a que termine.

Lo que necesitas es mandar a Windows que arranque un nuevo proceso, pero que te permita seguir con el tuyo.

El módulo que debes usar es Win32::Process.

El único problema es encontrar el/los flags que debes usar para crear ese proceso. En esta página hay algunas, pero no todas. Leyendo el libro Learning Perl on Win32 Systems, indica que es DETACHED_PROCESS. Ejemplo.

Y sobre el fork(), se comentaba desde ActiveState que iban a hacerlo funcionar igual que en UNIX, pero me parece que no, que todavía funciona como hace unos años: el proceso que hace el fork se queda esperando hasta que el proceso hijo termina.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor creating021 » 2007-01-19 18:45 @822

¿Y Windows no soporta threads?
Hay que recordar que su kernel, desde 9x soporta POSIX
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor jclp77 » 2007-01-19 19:00 @833

Hola a todos, ya pude manejarlo independiente en el mismo script utilizando win32::process, ahí va una parte del código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Win32::GuiTest qw(FindWindowLike GetWindowText SetForegroundWindow SendKeys);
use Win32::Process;
use Win32;

my $program = q{C:/Consulta.exe};
my $process;
unless ( Win32::Process::Create($process, $program, "calc", 0, NORMAL_PRIORITY_CLASS, '.') ) {
    croak ErrorReport();
}
sleep(1);
my ($consulta) = FindWindowLike 0, '^Calc';

SetForegroundWindow $consulta;
      SendKeys("123{TAB}123{TAB}{ENTER}"); #usuario y pwd
          sleep(3);
          SendKeys("%c");
      SendKeys("p");
          sleep(1);
      SendKeys("34897000156470{TAB}{ENTER}");
          sleep(3);
          SendKeys("%p");
          SendKeys("%o");
          SendKeys("p");
      SendKeys("s");
          sleep(3);
          SendKeys("{ENTER}");
          sleep(2);
          SendKeys("{ENTER}");
          sleep(2);
          SendKeys("{ENTER}");
          SendKeys("%n");
          SendKeys("{ENTER}");
          sleep(2);
      SendKeys("34897000156470{TAB}{ENTER}");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
jclp77
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2006-09-06 12:04 @544
Ubicación: México


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

cron