Novato

Hola. Estoy empezando en esto de la programacion, no tengo ni idea, me gustaria saber cual es la estrucura para ejecutar por ejemplo el programa xxxxx.es que esta en el directorio c:/archivo de programas/xxxx. GRACIAS
Respuesta
1
Utilizando WinExec:
WinExec(PChar('notepad.exe'),SW_SHOWNORMAL); {Ejecuta el Notepad.Exe}
Este ejemplo ejecutará el Block De Notas
El fichero a ejecutar debe estar dentro del PATH, o bien lo llamamos con la ruta completa:
WinExec(PChar('c:\windows\notepad.exe'),SW_SHOWNORMAL); {Ejecuta el Notepad.Exe}
Con WinExec, el programa Delphi no espera a que termine la ejecución de la aplicacion externa.
Si queremos que nuestra aplicacion Delphi espere hasta que la aplicación llamada haya terminado, podemos utilizar esta otra forma:
function TForm1.WinExecAndWait32(FileName:String; Visibility:integer):integer;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
Resultado: DWord;
begin
StrPCopy(zAppName,FileName);
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process security attributes}
nil, { pointer to thread security attributes}
false, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then Result := -1 { pointer to PROCESS_INF }
else begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Resultado);
Result := Resultado;
end;
end;
Otra versión de la anterior, que ejecuta Applicacion. ProcessMessages para que no se muera tu form mientras espera:
function WinExecAndWait32(FileName:String; Visibility:integer):integer;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
Resultado,exitCode: DWord;
begin
StrPCopy(zAppName,FileName);
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process security attributes}
nil, { pointer to thread security attributes}
false, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo);
{Espera a que termine la ejecucion}
{Wait until execution finish}
repeat
exitCode := WaitForSingleObject( ProcessInfo.hProcess,1000);
Application.ProcessMessages;
until (exitCode <> WAIT_TIMEOUT);
GetExitCodeProcess(ProcessInfo.hProcess,Resultado);
MessageBeep(0);
CloseHandle(ProcessInfo.hProcess );
Result:=Resultado;
end;
El primer ejemplo ejecuata el Notepad pero lo hago con otros programas y no ejecuta nada.
¿Pones la ruta absoluta del programa?
A menos que ya esté en la variable PATH del sistema, claro (como es el caso del Notepad).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas