如何在delphi中延迟shell命令?

时间:2010-10-07 23:21:20

标签: delphi shell

我正在使用Delphi 2010和ShellAPI。随着我正在构建的程序的增长,我需要一些帮助。这是应用程序的开玩笑:

检查是否存在某种情况 如果存在所述条件,则它开始执行2个shell命令,这些命令取决于前一个执行

的命令
   uses
  ShellApi;

procedure RenameDir(DirFrom, DirTo: string);
var
  shellinfo: TSHFileOpStruct;
begin
  with shellinfo do
  begin
    Wnd    := 0;
    wFunc  := FO_RENAME;
    pFrom  := PChar(DirFrom);
    pTo    := PChar(DirTo);
    fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
              FOF_SILENT or FOF_NOCONFIRMATION;
  end;
  SHFileOperation(shellinfo);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  RenameDir('C:\Dir1', 'C:\Dir2');

  RenameDir('C:\Dir3', 'C:\Dir');


end;

我是Delphi的新手,但我可以看到问题,第二个命令在上一个命令完成之前执行。如何解决此问题,以便在调用第二个命令之前执行并完成第一个命令?

更新:我添加了完整的伪代码,以便显示我尝试做的事情。

3 个答案:

答案 0 :(得分:2)

如果您使用的命令是外部命令/程序,请考虑使用CreateProcess()并将INFINITE传递给WaitForSingleObject()。查看ExecAndWait()示例here

答案 1 :(得分:0)

两种简单的方法:

  1. 插入睡眠(X);在两者之间执行命令并用5或10之类的低位填充x(应该是你需要的所有ms)。
  2. 在两者之间插入Application.ProcessMessages命令,以允许其他事件(包括重命名)完成。

答案 2 :(得分:0)

当目标名称实际更改时,也许您可​​以使用SHChangeNotifyRegister()来通知。