как узнать отработала ли внешняя программа??
От: Starter  
Дата: 04.04.03 01:22
Оценка:
Программа запускает vbscript используя функцию
ShellExecute(NULL, NULL, vbsfile, NULL, NULL, SW_SHOWNORMAL);
Как мне узнать, когда он отработает, чтобы удалить его?

04.04.03 08:10: Перенесено из 'C/C++'
Re: как узнать отработала ли внешняя программа??
От: Алексей Владимирович Миронов Россия  
Дата: 04.04.03 01:51
Оценка:
Здравствуйте, Starter, Вы писали:

S>Программа запускает vbscript используя функцию

S>ShellExecute(NULL, NULL, vbsfile, NULL, NULL, SW_SHOWNORMAL);
S>Как мне узнать, когда он отработает, чтобы удалить его?

По-моему, лучше вместо ShellExecute использовать ShellExecuteEx. Эта функция предоставляет HANDLE процесса, который можно использовать в WaitForSingleObject или периодически дергать GetExitCodeProcess.
Re[2]: как узнать отработала ли внешняя программа??
От: Starter  
Дата: 04.04.03 01:59
Оценка:
Здравствуйте, Алексей Владимирович Миронов, Вы писали:

АВМ>Здравствуйте, Starter, Вы писали:


S>>Программа запускает vbscript используя функцию

S>>ShellExecute(NULL, NULL, vbsfile, NULL, NULL, SW_SHOWNORMAL);
S>>Как мне узнать, когда он отработает, чтобы удалить его?

АВМ>По-моему, лучше вместо ShellExecute использовать ShellExecuteEx. Эта функция предоставляет HANDLE процесса, который можно использовать в WaitForSingleObject или периодически дергать GetExitCodeProcess.


Спасибо за помошь.
Можно по подробнее, как использовать эту ShellExecuteEx
для моего примера
Re[3]: как узнать отработала ли внешняя программа??
От: Алексей Владимирович Миронов Россия  
Дата: 04.04.03 03:20
Оценка: 36 (3)
Здравствуйте, Starter, Вы писали:

S>Можно по подробнее, как использовать эту ShellExecuteEx

S>для моего примера

#include <windows.h>
#include <stdio.h>
#include <assert.h>

void main ( void )
{
    SHELLEXECUTEINFO se;
    DWORD rc, exitcode;

    ZeroMemory ( &se, sizeof (se) );
    se.cbSize = sizeof (se);
    se.fMask = SEE_MASK_NOCLOSEPROCESS;
    se.lpFile = "C:\\your_dir\\your_script.vbs"; 
    se.nShow = SW_SHOWNORMAL;
    if (!ShellExecuteEx (&se))
        printf ( "Someting screwed up!\n" );
    else
    {
        assert (se.hProcess);
        // Мы можем установить максимальное время выполнения
        rc = WaitForSingleObject ( se.hProcess, 5000 ); // Если тайм-аут не нужен, пишем INFINITE
        switch (rc)
        {
        case WAIT_TIMEOUT:
            TerminateProcess ( se.hProcess, 0 );
            printf ("Killed due timeout\n");
            break;
        case WAIT_OBJECT_0:
            GetExitCodeProcess ( se.hProcess, &exitcode );
            printf ( "Normal exit, code=%d\n", exitcode );
            break;
        default:
            printf ("Wait abandoned?\n"); 
        }
        CloseHandle (se.hProcess); // Для очистки совести
    }
}


Посмотрите также раздел Q&amp;A.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.