如何让Delphi调用外部程序并等待其

如题所述

    uses  
        Windows,  
        SysUtils,  
        Classes,  
        ShellAPI;  
    function RunAndWait(FileName: string; Visibility: Integer): THandle;  
    var  
        zAppName: array[0..512] of Char;  
        zCurDir: array[0..255] of Char;  
        WorkDir: string;  
        StartupInfo: TStartupInfo;  
        ProcessInfo: TProcessInformation;  
    begin  
        try  
          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, nil, nil, false, Create_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then  
          begin  
            result := 0;  
            Exit;  
          end  
          else  
          begin  
            WaitForSingleObject(ProcessInfo.hProcess, INFINITE);  
            GetExitCodeProcess(ProcessInfo.hProcess, result);  
          end;  
        finally  
        end;  
    end;
温馨提示:内容为网友见解,仅供参考
无其他回答

如何让Delphi调用外部程序并等待其
ShellAPI; function RunAndWait(FileName: string; Visibility: Integer): THandle; var zAppName: array[0..512] of Char; zCurDir: array[0..255] of Char; WorkDir: string; StartupInfo: TStartup

delphi中调用Winrar后怎样等待其解压完成后再向下执行
示例代码如下:procedure TForm2.Button1Click(Sender: TObject);var StartInfo: TStartupInfo; ProcInfo: TProcessInformation;begin ZeroMemory(@StartInfo, SizeOf(TStartupInfo)); StartInfo.cb:= SizeOf(TStartupInfo); CreateProcess(nil,'C:\\Program Files\\WinRAR\\WinRAR.exe e ...

delphi 如何做一个等待窗体?后台计算,页面以动画的形式,提示用户等待...
先做一个等待窗口 在等待窗口里面写好等待文字 或者加上滚动的gif图片 然后后台计算使用线程完成 先开始线程在弹出这个等待窗口 然后线程结束后把等待窗口关掉即可

delphi程序运行时别的功能无法使用
当一个线程应该等待另一个线程结束时,可以调用Waitfor方法。这个方法属于等待线程对象,Waitfor方法的原型如下:Function Waitfor(Const Astring:string):string;比如在前面最基本的线程的例子中,唤醒线程的语句中加上thread1.resume; thread1.waitfor; thread2.resume;那么所有的线程都必须等待thread1运行完毕后才能运行,其...

delphi循环中等待问题~~
这个比较简单,你可以设置一个全局变量,初始化时等于0,按键按下令它=1,处理完询问(3)时,判断变量值如果变量=1则发送,否则不发送.

有没有人会用delphi制作一个等待窗体,窗体上加载动画
DELPHI+SQL语句的查询,占用不了多大时间,除非用某某表中的某某字段的值,不在或在某某表中之类的查询,这种查询很耗费时间,用“正在查询,请稍候...”之类的提示比较恰当,让用户知道,是查询没有结束,不是程序死掉了。问题是很多查询,如果不使用循环语句,就无法插入提示性的语句,即使是使用多线...

为什么delphi 程序运行时,我设置的提示窗口出现后,程序还继续往下运行...
你考虑以下几个原因:1、如果是用Show,而不是用ShowModal的话,程序不会暂停等待窗体的返回而直接继续运行。2、你用了ShowModal,但没有对ShowModal的返回值进行判断,以决定根据不同的值如何执行程序。

delphi 如何获取其它应用程序窗体中的所有控件句柄
实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果。新建窗体,上面放置一个Panel控件,名为pnlApp,然后按下面代码编写:unit frmTestEmbedApp; interface uses Windows, Messages, SysUtils...

想和大家讨论一下怎样控制Delphi IDE
[1] Delphi中提供了使用+E进行增量查找的方法,我个人不是特别的欣赏。[2] 在此处,需要注意的是,所有的数字键不能使用小键盘上的数字键。[3] 让程序暂时终止的方法有两个:(1)程序运行到断点处,程序自动暂时终止,等待调试; (2)调用<菜单:Run…>+ <菜单:Program Pause>完成程序的暂时...

delphi判断文件是否存在问题
你看看你写的这句“if FileExists(pchar(extractFilePath(application.exeName)+'newFile\\123.txt')); ”,后面还带了一个分号“;” ,你先把问题弄好再往下看吧~,首先如果在想在某个文件夹中创建文本话,你首先得保证这个文件夹的存在,要不怎么找到他的路径?然后你写的“memo1.Lines....

相似回答