Hola Danell.
Si, disculpas. Escribí el código en el aire y el último parámetro de
ShellExecute no debería ser 0.
De paso te pongo un ejemplo de un procedimiento al cual sólo debes mandarle la ruta y nombre del programa para simplificar el llamado:
Código Delphi
[-]
uses ShellApi;
procedure TForm1.EjecutarApp(AppName: string);
var
ErrNro: Integer;
ErrMsg: string;
begin
ErrNro:= ShellExecute(Handle, nil, PChar(AppName), nil, nil, SW_SHOWNORMAL);
case ErrNro of
ERROR_FILE_NOT_FOUND: ErrMsg := 'Archivo no encontrado';
ERROR_PATH_NOT_FOUND: ErrMsg := 'Ruta no encontrada';
SE_ERR_ACCESSDENIED : ErrMsg := 'Acceso negado';
SE_ERR_DDETIMEOUT : ErrMsg := 'Se agotó la solicitud de tiempo de espera';
SE_ERR_OOM : ErrMsg := 'Sin memoria para completar la operación';
end;
if ErrNro <= 32 then
MessageBox(Handle,PChar(ErrMsg),'ERROR',MB_ICONERROR+MB_OK);
end;
Llamadas de ejemplo:
Código Delphi
[-]
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
EjecutarApp('C:\Windows\System32\calc.exe');
end;
procedure TForm1.Image1Click(Sender: TObject);
begin
EjecutarApp('C:\Windows\System32\notepad.exe');
end;
Puse los errores mas comunes, el resto de ellos así como todos los detalles de la función
ShellExecute los tenes [
aquí].
Y por si te fuera de ayuda te adjunto un ejemplo para que puedas probarlo.
Saludos