in meiner app (Delphi XE10) schließen mag ich eine Datei öffnen (RTF) mit Standard-Editor des Benutzers (MSword oder Openoffice writter oder anderes) und der Lage sein, diesen Editor aus meiner Anwendung zu schließen. Ich habe versucht, den Code unten zu verwenden, aber ohne Erfolg auf diegeöffnet und ein externes Programm von Delphi
procedure TForm1.Button1Click(Sender: TObject);
var hApp : Cardinal;
begin
hApp := StartApp('open','temp.rtf','','',sw_normal);
anotherForm.showmodal;
KillProcess(hApp);
end;
Editor zu schließen, wo:
function StartApp(apchOperation, apchFileName, apchParameters, apchDirectory: PChar;awrdShowCmd: Word): Cardinal;
var
lseiInfo: TShellExecuteInfo;
begin
Result := 0;
FillChar(lseiInfo, SizeOf(lseiInfo), Chr(0));
lseiInfo.cbSize := SizeOf(lseiInfo);
lseiInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
lseiInfo.lpVerb := apchOperation;
lseiInfo.lpFile := apchFileName;
lseiInfo.lpParameters := apchParameters;
lseiInfo.lpDirectory := apchDirectory;
lseiInfo.nShow := awrdShowCmd;
if Boolean(ShellExecuteEx(@lseiInfo)) then
Result := lseiInfo.hProcess;
end;
procedure KillProcess(hProcess: Cardinal);
Var
ovExitCode: LongWord;
begin
try
if hProcess <> 0 then begin
GetExitCodeProcess(hProcess, ovExitCode);
if (ovExitCode = STILL_ACTIVE) or (ovExitCode <> WAIT_OBJECT_0) then
TerminateProcess(hProcess, ovExitCode);
CloseHandle(hProcess);
end;
except
end;
end;
Der Editor öffnet, aber wenn es mit Killprocess schließen müssen, ovExitCode ist immer Null, so TerminateProcess doesn‘ t ausführen. Ich versuche auch, TerminateProcess in jedem Fall auszuführen, aber der Editor (in diesem Fall MSword) wird nicht geschlossen.
Können Sie mir bitte helfen? Dank im Voraus
Dies wird im Allgemeinen nicht möglich sein. –
In der Dokumentation zu GetExitCodeProcess finden Sie Informationen darüber, warum es fehlschlägt. –
Auch Ihr 'try ... except' ist sinnlos. –