Results 1 to 7 of 7

Thread: How command line prog with progress bar in form....

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1

    How command line prog with progress bar in form....

    How can i do this :
    I have a function that runs and capture the a command line prog....

    here is the function
    Code:
    function RunCaptured(const _dirName, _exeName, _cmdLine, filename: string): Boolean;
    var
      start: TStartupInfo;
      procInfo: TProcessInformation;
      tmpName: string;
      tmp: Windows.THandle;
      tmpSec: TSecurityAttributes;
      res: TStringList;
      return: Cardinal;
    begin
      Result := False;
      try
        tmpName := 'Test.tmp';
        FillChar(tmpSec, SizeOf(tmpSec), #0);
        tmpSec.nLength := SizeOf(tmpSec);
        tmpSec.bInheritHandle := True;
        tmp := Windows.CreateFile(PChar(tmpName),
        Generic_Write, File_Share_Write,
        @tmpSec, Create_Always, File_Attribute_Normal, 0);
        try
        FillChar(start, SizeOf(start), #0);
        start.cb := SizeOf(start);
        start.hStdOutput := tmp;
        start.dwFlags := StartF_UseStdHandles or StartF_UseShowWindow;
        start.wShowWindow := SW_HIDE;
        // Start The Program
        if CreateProcess(nil, PChar(_exeName + ' ' + _cmdLine), nil, nil, True,
          0, nil, PChar(_dirName), start, procInfo) then
          begin
            Form1.pb1.Position := procInfo.hProcess;
            Application.ProcessMessages;
            SetPriorityClass(procInfo.hProcess, Idle_Priority_Class);
            WaitForSingleObject(procInfo.hProcess, Infinite);
            GetExitCodeProcess(procInfo.hProcess, return);
            Result := (return = 0);
            CloseHandle(procInfo.hThread);
            CloseHandle(procInfo.hProcess);
            Windows.CloseHandle(tmp);
            // Add the output
            res := TStringList.Create;
            try
              res.LoadFromFile(tmpName);
            finally
              res.Free;
            end;
            Windows.CopyFile(Pchar(tmpName),pchar(filename),FALSE);
            Windows.DeleteFile(PChar(tmpName));
          end
        else
          begin
           Application.MessageBox(PChar(SysErrorMessage(GetLastError())),
            'RunCaptured Error', MB_OK);
          end;
        except
          Windows.CloseHandle(tmp);
          Windows.DeleteFile(PChar(tmpName));
          raise;
        end;
      finally
      end;
    end;
    Now i want to put a progress bar in form and get the current position of the captured prog...
    How can i do that....

    Please help....
    Last edited by azrael11; 30-03-2011 at 12:42 PM.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •