Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-04-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.438
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
A parte de lo comentado por [Casimiro], a veces hay que tener en cuenta otros temas como:
  • El directorio desde dónde se ejecuta en una caso y otro (lo que sería el directorio activo)
  • El tema de permisos en un caso y otro
  • El PATH en un caso y otro
  • ...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #2  
Antiguo 09-04-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.214
Poder: 24
newtron Va camino a la fama
Hola.


Yo en su día quiero recordar que también tuve algún problema con "ShellExecute" y lo que hice fue llamarlo con una función que no recuerdo de dónde la saqué pero es la siguiente:


Código Delphi [-]

function EjecutarYEsperar( sPrograma: String; Visibilidad: Integer ): Integer;
var
  sAplicacion: array[0..512] of char;
  DirectorioActual: array[0..255] of char;
  DirectorioTrabajo: String;
  InformacionInicial: TStartupInfo;
  InformacionProceso: TProcessInformation;
  iResultado, iCodigoSalida: DWord;
begin
  StrPCopy( sAplicacion, sPrograma );
  GetDir( 0, DirectorioTrabajo );
  StrPCopy( DirectorioActual, DirectorioTrabajo );
  FillChar( InformacionInicial, Sizeof( InformacionInicial ), #0 );
  InformacionInicial.cb := Sizeof( InformacionInicial );

  InformacionInicial.dwFlags := STARTF_USESHOWWINDOW;
  InformacionInicial.wShowWindow := Visibilidad;
  CreateProcess( nil, sAplicacion, nil, nil, False,
                 CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
                 nil, nil, InformacionInicial, InformacionProceso );

  // Espera hasta que termina la ejecución
  repeat
    iCodigoSalida := WaitForSingleObject( InformacionProceso.hProcess, 1000 );
    Application.ProcessMessages;
  until ( iCodigoSalida <> WAIT_TIMEOUT );

  GetExitCodeProcess( InformacionProceso.hProcess, iResultado );
  MessageBeep( 0 );
  CloseHandle( InformacionProceso.hProcess );
  Result := iResultado;
end;


Para hacer la llamada solo tienes que enviar en sPrograma la cadena completa y en Visibilidad yo envío 0 aunque no recuerdo para qué era ese parámetro, imagino que para que se visualice o no el programa al que llamas.


Saludos
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 09-04-2019
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola fracapa.

Todo lo referente a la función ShellExecute lo encontrarás [aquí].

La función devuelve un resultado que, de fallar el llamado, podes revisar para ver cuál es el problema .

Un ejemplo:
Código Delphi [-]
uses ShellApi;
...
var
  lpOperation : PChar;
  lpFile      : PChar;
  lpParameters: PChar;
  lpDirectory : PChar;
  nShowCmd    : Integer;
  RetValue    : Integer;
begin
  lpOperation  := 'open';
  lpFile       := 'NOTEPAD.EXE';
  lpParameters := 'C:\WINDOWS\WIN.INI';
  lpDirectory  := 'C:\WINDOWS';
  nShowCmd     := SW_NORMAL;

  RetValue     := ShellExecute(Handle,
                               lpOperation,
                               lpFile,
                               lpParameters,
                               lpDirectory,
                               nShowCmd);

  if  RetValue <= 32 then
    ShowMessage(SysErrorMessage(GetLastError())); // (*)
end;
(*) También podrías evaluar el valor de retorno mediante la declaración if o case en lugar de la función GetLastError.

El ejemplo admite varias optimizaciones ya que prioricé la didactica sobre la eficiencia.


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 10-04-2019
fracapa fracapa is offline
Registrado
 
Registrado: jul 2015
Posts: 2
Poder: 0
fracapa Va por buen camino
Hola:

Cuando solo puse que no iba, era porque no tenia mas información, y la aplicación no me devolvía nada.

Todos los parámetros, rutas, etc etc estaban bien.

La función de Ejecutar y Esperar ya la había probado y no me funcionaba.

El problema es que a la aplicación le cuesta arrancar un poco, comprueba si hay lectores de DNIe, almacenes de certificados, etc etc y después realiza la firma con el pdf.

Use la función de abajo usando como condición de salida <> STILL_ACTIVE y quitando or Application.Terminated, porque el ShellExecuteEx lanza la aplicación que se le pasa y salia por el Terminated.
Código Delphi [-]
var
  SEInfo: TShellExecuteInfo;
  ExitCode: DWORD;
begin
  FillChar(SEInfo, SizeOf(SEInfo), 0) ;
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);

  SEInfo.fMask       := SEE_MASK_NOCLOSEPROCESS;
  SEInfo.Wnd         := Application.Handle;
  SEInfo.lpFile      := PChar(sFichero_Aplicacion);
  SEInfo.lpParameters:= PChar(sParametros);
  SEInfo.nShow       := SW_HIDE;

  if ShellExecuteEx(@SEInfo) then
  begin
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode) ;
    until (ExitCode <> STILL_ACTIVE); // or Application.Terminated;
  end
  else
    showmessage('Error') ;
end;
Gracias por todo y un saludo

Última edición por ecfisa fecha: 10-04-2019 a las 18:59:15. Razón: Agregar etiquetas [DELPHI]
Responder Con Cita
  #5  
Antiguo 11-04-2019
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 27
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por fracapa Ver Mensaje
Hola:

Cuando solo puse que no iba, era porque no tenia mas información, y la aplicación no me devolvía nada.

Todos los parámetros, rutas, etc etc estaban bien.

La función de Ejecutar y Esperar ya la había probado y no me funcionaba.
Buenas fracapa:

En los casos en los que la aplicación no funciona y "no devuelve nada", lo que hay que hacer es usar el depurador para vigilar el contenido de variables y ejecutar paso a paso las partes importantes del código para ver qué pasa realmente. Busca información sobre el funcionamiento del depurador de Delphi (que es bastante bueno) o de GDB (aunque ahora no recuerdo si puede usarse con Delphi); sigue algún tutorial y verás cómo ayuda.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como ejecutar programa externo y detener el proceso del programa hasta que termine vroa74 Varios 2 13-10-2016 17:48:36
Como ejecutar un programa externo. jmgc1982 C++ Builder 10 02-06-2008 09:47:29
Ejecutar programa externo con Lazarus abelaquino Lazarus, FreePascal, Kylix, etc. 1 12-05-2008 09:37:35
Ejecutar programa externo desde PHP fide PHP 10 07-02-2008 21:21:54
Ejecutar un programa externo desde un programa de Delphi Roger_Fernandez Varios 3 02-09-2004 18:05:36


La franja horaria es GMT +2. Ahora son las 17:25:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi