Ver Mensaje Individual
  #10  
Antiguo 25-05-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
He hecho un ejemplo en Delphi 6 para probar el concepto y funciona correctamente.
Dentro de un rato lo probaré en Delphi 11.


He hecho una aplicación que solo muestra el directorio en el que se ha lanzado.
Código Delphi [-]
procedure TForm1.FormShow(Sender: TObject);
var
  dir : string;
begin
  // Get the current directory
  dir := GetCurrentDir;
  Caption := 'Directorio = ' + dir;
end;

Luego he hecho otra aplicación con un Edit (EArchivo) y un Botón (BEjecutar).

Código Delphi [-]
uses ShellApi;

procedure TForm1.BEjecutarClick(Sender: TObject);
begin
  AbrirArchivo(EArchivo.Text);
end;

procedure TForm1.AbrirArchivo(Archivo: string);
var
  Resultado : word;
begin
  // Se utiliza cadena vacía en vez de 'open' porque algunas aplicaciones no tienen esta accion.
  Resultado := ShellExecute(Application.Handle, '' {'open'}, PChar(Archivo), nil, PChar(ExtractFilePath(Archivo)), SW_SHOW);
  case Resultado of
     0: ShowMessage('El sistema operativo no tiene memoria o recursos suficiente.'); // The operating system is out of memory or resources
     ERROR_BAD_FORMAT {11}: ShowMessage('El archivo EXE es inválido.'); // The .EXE file is invalid (non-Win32 .EXE or error in .EXE image)
     SE_ERR_ACCESSDENIED{5}: ShowMessage('El sistema operativo denego el acceso al archivo especificado.'); // The operating system denied access to the specified file
     SE_ERR_ASSOCINCOMPLETE{27}: ShowMessage('El archivo asociado es incompatible o inválido.'); //The filename association is incomplete or invalid
     SE_ERR_DDEBUSY{30}: ShowMessage('La transacción DDE no pudo completarse porque otra transaccion DDE estaba siendo procesada.'); // The DDE transaction could not be completed because other DDE transactions were being processed
     SE_ERR_DDEFAIL{29}: ShowMessage('La transacción DDE falló.'); // The DDE transaction failed
     SE_ERR_DDETIMEOUT{28}: ShowMessage('La transacción DDE no pudo completarse porque ha expirado.'); // The DDE transaction could not be completed because the request timed out
     SE_ERR_DLLNOTFOUND{32}: ShowMessage('La librería dinamica especificada no se ha encontrado.'); // The specified dynamic-link library was not found
     SE_ERR_FNF{2}: ShowMessage('El archivo no ha sido encontrado.'); //The specified file was not found
     SE_ERR_NOASSOC{31}: ShowMessage('No hay ninguna aplicación asociada con la extensión del archivo dado.'); // There is no application associated with the given filename extension
     SE_ERR_OOM{8}: ShowMessage('No ha habido memoria suficiente para completar la operación.'); // There was not enough memory to complete the operation
     SE_ERR_PNF{3}: ShowMessage('No se ha encontrado la carpeta especificada.'); // The specified path was not found
     SE_ERR_SHARE{26}: ShowMessage('Error de permisos.'); // A sharing violation occurred
  end;
end;

He copiado el ejecutable en diferentes directorios de la aplicación y los llamo escribiendo la ruta en en Edit.
Por ejemplo:
  1. Edit = "C:\Documents and Settings\Administrador\Mis documentos\Ejecutable1.exe"
  2. Pico sobre el botón Ejecutar.
  3. Ejecuta la aplicación y en su Caption pone "Directorio = C:\Documents and Settings\Administrador\Mis documentos\"

Si modifico la aplicación y quito el quinto parámetro pasando nil
Resultado := ShellExecute(Application.Handle, '' {'open'}, PChar(Archivo), nil, nil, SW_SHOW);
  1. Edit = "C:\Documents and Settings\Administrador\Mis documentos\Ejecutable1.exe"
  2. Pico sobre el botón Ejecutar.
  3. Ejecuta la aplicación y en su Caption pone "Directorio = C:\Desarrollo\Pruebas\"

Pruebas.jpg

Última edición por duilioisola fecha: 25-05-2023 a las 10:44:03.
Responder Con Cita