Contributor: MARC EVANS

{
>>
>> DELPHI EQUIVALENT TO VB SHELL COMMAND
>>
[Trimmed]
>
>> 3: Will I have a method of monitoring the DOS program/shell to I
>>    know when it has terminated?
>>
>

You have to dig about a bit in the API to do this, but the answer is
basically to keep enumerating the task list until the task that you
started is no longer present. Do something like this to get the
Hinstance of your new task (The API call used to enumerate the task list
needs a Hinstance):
}
    {Execute batch file}
    StrPCopy(Templine, 'temp.bat');
    TaskHandle := ShellExecute(frmMain.Handle, NIL, 'command.com',
                  templine,
                  Tempdir,
                  SW_MINIMIZE);

and monitor it with a function like this:

<------------------------------------------------->

    function CheckTask(hInstance: WORD): Boolean;
    var
        TaskInfo: TTASKENTRY;
        RetVal: Boolean;
    begin
        TaskInfo.dwSize := SizeOf(TTASKENTRY);
        RetVal := FALSE;
        if(TaskFirst(@TaskInfo)) then
        begin
            repeat
                if(TaskInfo.hInst = hInstance) then
                begin
                    RetVal := TRUE;
                    Break;
                end;
            until (TaskNext(@TaskInfo) = FALSE);
        end;
        CheckTask := RetVal;
    end;
<-------------------------------------------------->

This runs down the task list, trying to find the task with the specified
Hinstance, returning true if it is still there. To use this function,
simply call it in a loop like this

    while CheckTask(TaskHandle) do
    begin
        Application.ProcessMessages;
    end;

Hope this helps.

---------------------------------------------------------------------
Marc Evans                      marc@leviathn.demon.co.uk