Ejecutar winword.exe desde código en delphi4

Quiero desde codigo en delphi4 ejecutar winword.exe con que instruccion lo puedo hacer

1 respuesta

Respuesta
1
Lo primero que podrías probar es:
WinExec(PChar('c:\path_hasta_winword\winword.exe'),SW_SHOWNORMAL); {Ejecuta el WinWord.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 { 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;
Sacado de Trucomanía (www.q3.nu).
Si te sirvió, calificame en TodoExpertos. Si no, avisame y veo si te puedo seguir ayudando.
Marcelo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas