19 Temmuz 2014 Cumartesi

Delphi Bat dosyası işlemi için bekletme

Merhabalar,

Elbet birgün karşınıza çıkacaktır .bat dosyası ile haşır neşir olma olayı.
Bir dosya kopyalama işlemide olabilir fark edeceksiniz ki .bat dosyası çalıştırıldığı andan sonra delphi kodları devam etmektedir ve .bat dosyasının işleminin bitmesini beklemez.

Yine her zamanki gibi nette gezinirken bir kod parçası buldum ve tam olarak bu işe yaramaktadır .bat dosyasının işlemi biter ve delphi kodları öyle devam eder.


uses ShellAPI;

function TForm1.ShellExecute_AndWait(FileName: string; Params: string): bool;
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin

  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize := SizeOf(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := GetActiveWindow();
    exInfo.lpVerb := 'open';
    exInfo.lpParameters := PChar(Params);
    lpFile := PChar(FileName);
    nShow := SW_SHOWNORMAL;
  end;
  if ShellExecuteEx(@exInfo) then
    Ph := exInfo.hProcess
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Result := true;
    exit;
  end;
  while WaitForSingleObject(exInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    Application.ProcessMessages;
  CloseHandle(Ph);

  Result := true;

end;


Kullanımı:
ShellExecute_AndWait('BatYolu','');