Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 09:39
Hallo #,

folgender bekannter Code funktioniert leider mit OpenOffice (3.4.1) nicht mehr.

Delphi-Quellcode:
function ExecAndWait(const Filename, Params: string;
                     WindowState: word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Enclose filename in quotes to take care of
    long filenames with spaces. }

  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WindowState;
  end;
  Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE,
                          CREATE_NEW_CONSOLE or
                          NORMAL_PRIORITY_CLASS, NIL,
                          PChar(ExtractFilePath(Filename)),
                          SUInfo, ProcInfo);
  { Wait for it to finish. }
  if Result then
  begin
    MessageBox(0, PChar(IntToStr(ProcInfo.dwProcessId)), '', 0);
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  end;
end;
Das Problem ist, dass das WaitForSingleObject nicht wartet.
Schaue ich mit die ProzessId von swriter im Task-Manager an,
ist das nicht die gleiche wie ich in der MessageBox ausgebe.
OO erzeugt wohl einen 2. Prozess swriter, der das eigentliche Programm ist.

Was nun ?

Im Netz steht irgendwas von "ParentProcId benutzen",
also die Subprozesse überwachen ?
Ist das die richtige Richtung ?


Danke


Heiko
der
Heiko

Geändert von mkinzler (27. Jan 2013 um 10:10 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat