delphi执行一个外部程序,当外部程序结束后,delphi程序立即响应

//需要引用 ShellAPI 单元;procedure TForm1.Button1Click(Sender: TObject);
var
  SEInfo: TShellExecuteInfo;
  ExitCode: DWORD;
  ExecuteFile, ParamString, StartInString: string;
begin
  ExecuteFile := ‘c:\Windows\system32\Calc.exe‘;
  FillChar(SEInfo, SizeOf(SEInfo), #0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Application.Handle;
    lpFile := PChar(ExecuteFile);
    //ParamString can contain the application parameters
//    lpParameters := PChar(ParamString);
    //StartInString specifies the name of the working directory.if ommited, the current directory is used.
//    lpDirectory := PChar(StartInString);
    nShow := SW_SHOWNORMAL;
  end;
  if ShellExecuteEx(@SEInfo) then
  begin
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
      if ExitCode = STILL_ACTIVE then Sleep(500);
    until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
    ShowMessage(‘Calculator terminated‘);
  end
  else
    ShowMessage(‘Error starting Calc!‘);
end;  
时间: 2024-10-06 14:42:10

delphi执行一个外部程序,当外部程序结束后,delphi程序立即响应的相关文章

jquery动画函数里面可以跟一个回调函数,表示动画结束后执行的代码

使用js监听动画结束后进行的操作: $ele.fadeIn(300,function(){...}) $ele.fadeOut(300,function(){...}) $ele.slideUpDown(300,function(){...}) $ele.fadeSlideUpDown(300,function(){...}) 原文地址:https://www.cnblogs.com/Knowledge-is-infinite/p/11380628.html

C# 多线程join的用法,等待多个子线程结束后再执行主线程

等待多个子线程结束后再执行主线程 class MultiThread{ #region join test public void MultiThreadTest() { Thread[] ths = new Thread[2]; ths[0] = new Thread(Method1); ths[1] = new Thread(Method2); foreach (Thread item in ths) { //首先让所有线程都启动 item.Start(); //试想一下在这里加上item.

背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 关联启动 使用外部程序打开一个文件 使用外部程序打开一个 Uri 示例1.演示如何使用外部程序打开一个文件AssociationLaunching/LaunchFile.xaml <Page x:Class="Windows10.AssociationLaunching.LaunchFile" xmlns="http://schemas.microsoft.com/winfx/2006/xaml

iOS UITableView reloadData 刷新结束后执行后续操作

如果在reloadData后需要立即获取tableview的cell.高度,或者需要滚动tableview. 如果直接在reloadData后执行代码是有可能出问题的,比如indexPath为nil等等异常情况. [tableView reloadData]并不会等待tableview更新结束后才执行后续代码, 而是立即执行后续代码,然后异步地去计算scrollView的高度,获取cell等等. 如果表中的数据非常大,在一个run loop周期没执行完, 这时就显示tableView视图数据的操

ExtJS中关于分页加载数据后执行一个回调函数的问题

前几天,一个项目中有用到ExtJS.之前修改的时候,只是在Store Load的时候执行一个回调,这个会导致翻页的时候,没有执行这个回调,而这个回调做的恰好是一些数据的格式验证不可或缺的. 被这个问题困扰了很久,也查了很多的关于ExtJs Store的应用和API,最终找到了一个解决的办法,其实很简单,就是在Store里面添加一个load事件的监听. new Ext.data.Store({... listeners: { "load": function (store, operat

带您理解SQLSERVER是如何执行一个查询的

原文地址:http://www.cnblogs.com/lyhabc/p/3367274.html 看这篇文章之前,阁下可以先看一下下面的文章 SQLSERVER独特的任务调度算法"SQLOS" SQL Server SQLOS 的任务调度[转] 翻译自: http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/ http://www.codeproject.com/Articles/6303

如何在linux中执行一个脚本

---恢复内容开始--- 如何在LINUX中在系统启动时自动执行一个执行脚本 如果是开机马上执行的脚本,可以将脚本写到rc.local中: 如果是用户登录后自动执行脚本,可以将脚本写到相应的用户目录下"-/.bash_profile",若脚本"-/.bash_profile"不存在,可以直接拷贝"/etc/profile"命名为"-/.bash_profile": 如果是要任一用户登录后自动执行脚本,可以将脚本写到"

用捕捉函数解决如何在多个动作结束后回调函数实现

前几天在练习制作一个消除游戏,其中多次遇到这样一个问题:怎么在多个动作结束后,再回调一个函数?比如说,在消除几个宝石后,才需要刷新布局.那么只要有一个宝石的动作没有结束,就不能回调刷新的函数. 在cocos2d-x当中,提供了CallFunc这样一个动作,可以在一个动作结束后回调一个函数.可是这仅仅适用于一个节点的动作,多个节点就不知道如何是好了.好像用CallFunc这条路是走不通了.想来想去,我找到一个比较笨的办法,但并不影响效率,却完美解决了问题. 那就是用schedule做一个捕捉函数—

第1周 SQL Server 如何执行一个查询

原文:第1周 SQL Server 如何执行一个查询 大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础.这个部分非常重要,因为接下来的培训中我们会以这些概念来加深我们对SQL Server的认识. 当我们执行一个查询时,在SQL Server中最重要的组件有哪些,下面这张图片可以给大家一个概观的认识. 可以看到,SQL Server内部分成了2个部分:关系引擎和存储