代码之家  ›  专栏  ›  技术社区  ›  Charles Faiga

如何判断外部应用程序何时在Delphi中结束

  •  2
  • Charles Faiga  · 技术社区  · 15 年前

    我正在使用ShellExecute运行外部应用程序 如何判断外部应用程序何时结束?

    这里是我的代码

    theProgram     :=  'MySql.exe';
    itsParameters  :=  ' -u user1 -ppassword -e "create database abc"’;
    rslt := ShellExecute(0, 'open',
                           pChar (theProgram),
                           pChar (itsParameters),
                           nil,
                           SW_SHOW);
    
    2 回复  |  直到 15 年前
        1
  •  10
  •   Matthias    15 年前

    尝试以下功能。WaitForSingleObject执行您需要的操作。

    function ExecAppAndWait(const sApp, sParams: String; wShow: Word; sCurrentDirectory: String = ''): DWord;
    { Parameter wShow: SW_HIDE, SW_SHOWNORMAL, SW_NORMAL, SW_MAXIMIZE ...}
    var
      aSI     : TStartupInfo;        // Win32 : STARTUPINFO
      aPI     : TProcessInformation; // Win32 : PROCESS_INFORMATION
      aProc   : THandle;             // Win32
      aCurrentDirectory: PChar;
      s: String;
    begin
      s := sApp + ' ' + sParams;
      FillChar(aSI, SizeOf(aSI), 0);
      aSI.cb := SizeOf(aSI);
      aSI.wShowWindow := wShow;
      aSi.dwFlags := STARTF_USESHOWWINDOW;
    
    
      if sCurrentDirectory = '' then
        aCurrentDirectory := nil
      else
        aCurrentDirectory := PChar(sCurrentDirectory);
    
      Win32Check(CreateProcess(nil, PChar(s), nil, nil,
                 False, Normal_Priority_Class, nil, aCurrentDirectory, aSI, aPI));
       // in TProcessInformation.hProcess -> Process-Handle
      aProc := aPI.hProcess;
    
      CloseHandle(aPI.hThread);
    
    
      if WaitForSingleObject(aProc, Infinite) <> Wait_Failed then
        GetExitCodeProcess(aProc, Result);
      // free Ressource
      CloseHandle(aProc);
    end;
    
        2
  •  2
  •   Kornel Kisielewicz    15 年前

    ShellExecute是一个直接的WinAPI函数。要获取有关已执行进程的任何信息,需要使用 ShellExecuteEx 相反。

    推荐文章