我正在使用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的新手,但我可以看到问题,第二个命令在上一个命令完成之前执行。如何解决此问题,以便在调用第二个命令之前执行并完成第一个命令?
更新:我添加了完整的伪代码,以便显示我尝试做的事情。
答案 0 :(得分:2)
如果您使用的命令是外部命令/程序,请考虑使用CreateProcess()
并将INFINITE传递给WaitForSingleObject()
。查看ExecAndWait()
示例here。
答案 1 :(得分:0)
两种简单的方法:
答案 2 :(得分:0)
当目标名称实际更改时,也许您可以使用SHChangeNotifyRegister()来通知。